pymammotion 0.4.48__tar.gz → 0.4.50__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 (129) hide show
  1. {pymammotion-0.4.48 → pymammotion-0.4.50}/PKG-INFO +1 -1
  2. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/aliyun/client.py +1 -1
  3. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/aliyun/cloud_gateway.py +1 -1
  4. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/data/model/device.py +2 -1
  5. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/data/model/device_info.py +8 -0
  6. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/data/state_manager.py +9 -0
  7. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/mammotion/commands/messages/network.py +0 -5
  8. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/mammotion/devices/mammotion.py +16 -15
  9. {pymammotion-0.4.48 → pymammotion-0.4.50}/pyproject.toml +2 -2
  10. {pymammotion-0.4.48 → pymammotion-0.4.50}/LICENSE +0 -0
  11. {pymammotion-0.4.48 → pymammotion-0.4.50}/README.md +0 -0
  12. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/__init__.py +0 -0
  13. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/aliyun/__init__.py +0 -0
  14. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/aliyun/model/aep_response.py +0 -0
  15. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/aliyun/model/connect_response.py +0 -0
  16. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/aliyun/model/dev_by_account_response.py +0 -0
  17. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/aliyun/model/login_by_oauth_response.py +0 -0
  18. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/aliyun/model/regions_response.py +0 -0
  19. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/aliyun/model/session_by_authcode_response.py +0 -0
  20. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/aliyun/regions.py +0 -0
  21. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/aliyun/tea/core.py +0 -0
  22. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/aliyun/tmp_constant.py +0 -0
  23. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/bluetooth/__init__.py +0 -0
  24. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/bluetooth/ble.py +0 -0
  25. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/bluetooth/ble_message.py +0 -0
  26. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/bluetooth/const.py +0 -0
  27. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/bluetooth/data/__init__.py +0 -0
  28. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/bluetooth/data/convert.py +0 -0
  29. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/bluetooth/data/framectrldata.py +0 -0
  30. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/bluetooth/data/notifydata.py +0 -0
  31. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/bluetooth/model/__init__.py +0 -0
  32. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/bluetooth/model/atomic_integer.py +0 -0
  33. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/const.py +0 -0
  34. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/data/__init__.py +0 -0
  35. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/data/model/__init__.py +0 -0
  36. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/data/model/account.py +0 -0
  37. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/data/model/device_config.py +0 -0
  38. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/data/model/device_limits.py +0 -0
  39. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/data/model/enums.py +0 -0
  40. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/data/model/excute_boarder_params.py +0 -0
  41. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/data/model/execute_boarder.py +0 -0
  42. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/data/model/generate_route_information.py +0 -0
  43. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/data/model/hash_list.py +0 -0
  44. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/data/model/location.py +0 -0
  45. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/data/model/mowing_modes.py +0 -0
  46. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/data/model/rapid_state.py +0 -0
  47. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/data/model/raw_data.py +0 -0
  48. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/data/model/region_data.py +0 -0
  49. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/data/model/report_info.py +0 -0
  50. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/data/model/work.py +0 -0
  51. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/data/mqtt/__init__.py +0 -0
  52. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/data/mqtt/event.py +0 -0
  53. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/data/mqtt/properties.py +0 -0
  54. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/data/mqtt/status.py +0 -0
  55. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/event/__init__.py +0 -0
  56. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/event/event.py +0 -0
  57. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/http/__init__.py +0 -0
  58. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/http/_init_.py +0 -0
  59. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/http/encryption.py +0 -0
  60. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/http/http.py +0 -0
  61. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/http/model/__init__.py +0 -0
  62. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/http/model/camera_stream.py +0 -0
  63. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/http/model/http.py +0 -0
  64. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/mammotion/__init__.py +0 -0
  65. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/mammotion/commands/__init__.py +0 -0
  66. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/mammotion/commands/abstract_message.py +0 -0
  67. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/mammotion/commands/mammotion_command.py +0 -0
  68. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/mammotion/commands/messages/__init__.py +0 -0
  69. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/mammotion/commands/messages/driver.py +0 -0
  70. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/mammotion/commands/messages/media.py +0 -0
  71. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/mammotion/commands/messages/navigation.py +0 -0
  72. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/mammotion/commands/messages/ota.py +0 -0
  73. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/mammotion/commands/messages/system.py +0 -0
  74. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/mammotion/commands/messages/video.py +0 -0
  75. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/mammotion/control/__init__.py +0 -0
  76. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/mammotion/control/joystick.py +0 -0
  77. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/mammotion/devices/__init__.py +0 -0
  78. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/mammotion/devices/base.py +0 -0
  79. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/mammotion/devices/mammotion_bluetooth.py +0 -0
  80. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/mammotion/devices/mammotion_cloud.py +0 -0
  81. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/mqtt/__init__.py +0 -0
  82. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/mqtt/linkkit/__init__.py +0 -0
  83. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/mqtt/linkkit/h2client.py +0 -0
  84. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/mqtt/linkkit/linkkit.py +0 -0
  85. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/mqtt/mammotion_future.py +0 -0
  86. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/mqtt/mammotion_mqtt.py +0 -0
  87. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/proto/__init__.py +0 -0
  88. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/proto/basestation.proto +0 -0
  89. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/proto/basestation_pb2.py +0 -0
  90. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/proto/basestation_pb2.pyi +0 -0
  91. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/proto/common.proto +0 -0
  92. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/proto/common_pb2.py +0 -0
  93. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/proto/common_pb2.pyi +0 -0
  94. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/proto/dev_net.proto +0 -0
  95. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/proto/dev_net_pb2.py +0 -0
  96. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/proto/dev_net_pb2.pyi +0 -0
  97. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/proto/luba_msg.proto +0 -0
  98. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/proto/luba_msg_pb2.py +0 -0
  99. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/proto/luba_msg_pb2.pyi +0 -0
  100. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/proto/luba_mul.proto +0 -0
  101. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/proto/luba_mul_pb2.py +0 -0
  102. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/proto/luba_mul_pb2.pyi +0 -0
  103. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/proto/mctrl_driver.proto +0 -0
  104. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/proto/mctrl_driver_pb2.py +0 -0
  105. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/proto/mctrl_driver_pb2.pyi +0 -0
  106. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/proto/mctrl_nav.proto +0 -0
  107. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/proto/mctrl_nav_pb2.py +0 -0
  108. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/proto/mctrl_nav_pb2.pyi +0 -0
  109. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/proto/mctrl_ota.proto +0 -0
  110. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/proto/mctrl_ota_pb2.py +0 -0
  111. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/proto/mctrl_ota_pb2.pyi +0 -0
  112. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/proto/mctrl_pept.proto +0 -0
  113. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/proto/mctrl_pept_pb2.py +0 -0
  114. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/proto/mctrl_pept_pb2.pyi +0 -0
  115. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/proto/mctrl_sys.proto +0 -0
  116. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/proto/mctrl_sys_pb2.py +0 -0
  117. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/proto/mctrl_sys_pb2.pyi +0 -0
  118. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/py.typed +0 -0
  119. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/utility/constant/__init__.py +0 -0
  120. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/utility/constant/device_constant.py +0 -0
  121. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/utility/conversions.py +0 -0
  122. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/utility/datatype_converter.py +0 -0
  123. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/utility/device_config.py +0 -0
  124. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/utility/device_type.py +0 -0
  125. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/utility/map.py +0 -0
  126. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/utility/movement.py +0 -0
  127. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/utility/mur_mur_hash.py +0 -0
  128. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/utility/periodic.py +0 -0
  129. {pymammotion-0.4.48 → pymammotion-0.4.50}/pymammotion/utility/rocker_util.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: pymammotion
3
- Version: 0.4.48
3
+ Version: 0.4.50
4
4
  Summary:
5
5
  License: GPL-3.0
6
6
  Author: Michael Arthur
@@ -183,7 +183,7 @@ class Client:
183
183
  if _retry_times > 0:
184
184
  _backoff_time = TeaCore.get_backoff_time(_runtime.get("backoff"), _retry_times)
185
185
  if _backoff_time > 0:
186
- TeaCore.sleep(_backoff_time)
186
+ await TeaCore.sleep_async(_backoff_time)
187
187
  _retry_times = _retry_times + 1
188
188
  try:
189
189
  _request = TeaRequest()
@@ -732,7 +732,7 @@ class CloudIOTGateway:
732
732
  logger.debug(iot_id)
733
733
 
734
734
  response_body_str = response.body.decode("utf-8")
735
- response_body_dict = json.loads(response_body_str)
735
+ response_body_dict = json.loads(response_body_str) if response_body_str is not None else {}
736
736
 
737
737
  if int(response_body_dict.get("code")) != 200:
738
738
  logger.error(
@@ -6,7 +6,7 @@ import betterproto
6
6
  from mashumaro.mixins.orjson import DataClassORJSONMixin
7
7
 
8
8
  from pymammotion.data.model import HashList, RapidState
9
- from pymammotion.data.model.device_info import DeviceFirmwares, MowerInfo
9
+ from pymammotion.data.model.device_info import DeviceFirmwares, DeviceNonWorkingHours, MowerInfo
10
10
  from pymammotion.data.model.location import Location
11
11
  from pymammotion.data.model.report_info import ReportData
12
12
  from pymammotion.data.model.work import CurrentTaskSettings
@@ -38,6 +38,7 @@ class MowingDevice(DataClassORJSONMixin):
38
38
  err_code_list: list = field(default_factory=list)
39
39
  err_code_list_time: list | None = field(default_factory=list)
40
40
  error_codes: dict[str, ErrorInfo] = field(default_factory=dict)
41
+ non_work_hours: DeviceNonWorkingHours = field(default_factory=DeviceNonWorkingHours)
41
42
 
42
43
  def buffer(self, buffer_list: SystemUpdateBufMsg) -> None:
43
44
  """Update the device based on which buffer we are reading from."""
@@ -14,6 +14,12 @@ class SideLight(DataClassORJSONMixin):
14
14
  action: int = 0
15
15
 
16
16
 
17
+ @dataclass
18
+ class DeviceNonWorkingHours(DataClassORJSONMixin):
19
+ start_time: str = ""
20
+ end_time: str = ""
21
+
22
+
17
23
  @dataclass
18
24
  class MowerInfo(DataClassORJSONMixin):
19
25
  blade_status: bool = False
@@ -27,6 +33,8 @@ class MowerInfo(DataClassORJSONMixin):
27
33
  product_key: str = ""
28
34
  model_id: str = ""
29
35
  sub_model_id: str = ""
36
+ ble_mac: str = ""
37
+ wifi_mac: str = ""
30
38
 
31
39
 
32
40
  @dataclass
@@ -20,12 +20,14 @@ from pymammotion.proto import (
20
20
  DeviceProductTypeInfoT,
21
21
  DrvDevInfoResp,
22
22
  DrvDevInfoResult,
23
+ GetNetworkInfoRsp,
23
24
  LubaMsg,
24
25
  NavGetCommDataAck,
25
26
  NavGetHashListAck,
26
27
  NavPlanJobSet,
27
28
  NavReqCoverPath,
28
29
  NavSysParamMsg,
30
+ NavUnableTimeSet,
29
31
  SvgMessageAckT,
30
32
  TimeCtrlLight,
31
33
  WifiIotStatusReport,
@@ -183,6 +185,10 @@ class StateManager:
183
185
  self._device.mower_state.turning_mode = settings.context
184
186
  case 7:
185
187
  self._device.mower_state.traversal_mode = settings.context
188
+ case "todev_unable_time_set":
189
+ nav_non_work_time: NavUnableTimeSet = nav_msg[1]
190
+ self._device.non_work_hours.start_time = nav_non_work_time.unable_start_time
191
+ self._device.non_work_hours.end_time = nav_non_work_time.unable_end_time
186
192
 
187
193
  def _update_sys_data(self, message) -> None:
188
194
  """Update system."""
@@ -225,6 +231,9 @@ class StateManager:
225
231
  if resp.res == DrvDevInfoResult.DRV_RESULT_SUC and resp.id == 1 and resp.type == 6:
226
232
  self._device.mower_state.swversion = resp.info
227
233
  self._device.device_firmwares.device_version = resp.info
234
+ case "toapp_networkinfo_rsp":
235
+ get_network_info_resp: GetNetworkInfoRsp = net_msg[1]
236
+ self._device.mower_state.wifi_mac = get_network_info_resp.wifi_mac
228
237
 
229
238
  def _update_mul_data(self, message) -> None:
230
239
  pass
@@ -192,11 +192,6 @@ class MessageNetwork(AbstractMessage, ABC):
192
192
  logger.debug("Send command - get Wifi connection information")
193
193
  return self.send_order_msg_net(build)
194
194
 
195
- def wifi_connectinfo_update2(self) -> None:
196
- hash_map = {"getMsgCmd": 1}
197
- # self.post_custom_data(self.get_json_string(
198
- # 68, hash_map)) # TODO: Fix this
199
-
200
195
  def get_record_wifi_list(self) -> bytes:
201
196
  build = DevNet(todev_ble_sync=1, todev_wifi_list_upload=DrvWifiList())
202
197
  logger.debug("Send command - get memorized WiFi list upload command")
@@ -133,21 +133,22 @@ class MammotionDeviceManager:
133
133
  return self.devices.get(mammotion_device_name)
134
134
 
135
135
  async def remove_device(self, name: str) -> None:
136
- device_for_removal = self.devices.pop(name)
137
- loop = asyncio.get_running_loop()
138
- if device_for_removal.has_cloud():
139
- should_disconnect = {
140
- device
141
- for key, device in self.devices.items()
142
- if device.cloud() is not None and device.cloud().mqtt == device_for_removal.cloud().mqtt
143
- }
144
- if len(should_disconnect) == 0:
145
- await loop.run_in_executor(None, device_for_removal.cloud().mqtt.disconnect)
146
- await device_for_removal.cloud().stop()
147
- if device_for_removal.has_ble():
148
- await device_for_removal.ble().stop()
149
-
150
- del device_for_removal
136
+ if self.devices.get(name):
137
+ device_for_removal = self.devices.pop(name)
138
+ loop = asyncio.get_running_loop()
139
+ if device_for_removal.has_cloud():
140
+ should_disconnect = {
141
+ device
142
+ for key, device in self.devices.items()
143
+ if device.cloud() is not None and device.cloud().mqtt == device_for_removal.cloud().mqtt
144
+ }
145
+ if len(should_disconnect) == 0:
146
+ await loop.run_in_executor(None, device_for_removal.cloud().mqtt.disconnect)
147
+ await device_for_removal.cloud().stop()
148
+ if device_for_removal.has_ble():
149
+ await device_for_removal.ble().stop()
150
+
151
+ del device_for_removal
151
152
 
152
153
 
153
154
  class Mammotion:
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
4
4
 
5
5
  [project]
6
6
  name = "pymammotion"
7
- version = "0.4.48"
7
+ version = "0.4.50"
8
8
  license = "GPL-3.0"
9
9
  description = ""
10
10
  readme = "README.md"
@@ -66,7 +66,7 @@ autotyping = "^24.3.0"
66
66
  ipython = "^9.0.2"
67
67
 
68
68
  [tool.bumpver]
69
- current_version = "0.4.48"
69
+ current_version = "0.4.50"
70
70
  version_pattern = "MAJOR.MINOR.PATCH"
71
71
  commit_message = "Bump version {old_version} -> {new_version}"
72
72
  commit = true
File without changes
File without changes