OpenShock-AutoFlasher 0.2.0__tar.gz → 0.2.1__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 (26) hide show
  1. {openshock_autoflasher-0.2.0 → openshock_autoflasher-0.2.1/OpenShock_AutoFlasher.egg-info}/PKG-INFO +1 -1
  2. {openshock_autoflasher-0.2.0/OpenShock_AutoFlasher.egg-info → openshock_autoflasher-0.2.1}/PKG-INFO +1 -1
  3. {openshock_autoflasher-0.2.0 → openshock_autoflasher-0.2.1}/openshock_autoflasher/flasher.py +20 -5
  4. {openshock_autoflasher-0.2.0 → openshock_autoflasher-0.2.1}/pyproject.toml +1 -1
  5. {openshock_autoflasher-0.2.0 → openshock_autoflasher-0.2.1}/LICENSE +0 -0
  6. {openshock_autoflasher-0.2.0 → openshock_autoflasher-0.2.1}/MANIFEST.in +0 -0
  7. {openshock_autoflasher-0.2.0 → openshock_autoflasher-0.2.1}/OpenShock_AutoFlasher.egg-info/SOURCES.txt +0 -0
  8. {openshock_autoflasher-0.2.0 → openshock_autoflasher-0.2.1}/OpenShock_AutoFlasher.egg-info/dependency_links.txt +0 -0
  9. {openshock_autoflasher-0.2.0 → openshock_autoflasher-0.2.1}/OpenShock_AutoFlasher.egg-info/entry_points.txt +0 -0
  10. {openshock_autoflasher-0.2.0 → openshock_autoflasher-0.2.1}/OpenShock_AutoFlasher.egg-info/requires.txt +0 -0
  11. {openshock_autoflasher-0.2.0 → openshock_autoflasher-0.2.1}/OpenShock_AutoFlasher.egg-info/top_level.txt +0 -0
  12. {openshock_autoflasher-0.2.0 → openshock_autoflasher-0.2.1}/README.md +0 -0
  13. {openshock_autoflasher-0.2.0 → openshock_autoflasher-0.2.1}/openshock_autoflasher/__init__.py +0 -0
  14. {openshock_autoflasher-0.2.0 → openshock_autoflasher-0.2.1}/openshock_autoflasher/__main__.py +0 -0
  15. {openshock_autoflasher-0.2.0 → openshock_autoflasher-0.2.1}/openshock_autoflasher/cli.py +0 -0
  16. {openshock_autoflasher-0.2.0 → openshock_autoflasher-0.2.1}/openshock_autoflasher/constants.py +0 -0
  17. {openshock_autoflasher-0.2.0 → openshock_autoflasher-0.2.1}/openshock_autoflasher/py.typed +0 -0
  18. {openshock_autoflasher-0.2.0 → openshock_autoflasher-0.2.1}/openshock_autoflasher/styles.py +0 -0
  19. {openshock_autoflasher-0.2.0 → openshock_autoflasher-0.2.1}/requirements-dev.txt +0 -0
  20. {openshock_autoflasher-0.2.0 → openshock_autoflasher-0.2.1}/requirements.txt +0 -0
  21. {openshock_autoflasher-0.2.0 → openshock_autoflasher-0.2.1}/setup.cfg +0 -0
  22. {openshock_autoflasher-0.2.0 → openshock_autoflasher-0.2.1}/tests/__init__.py +0 -0
  23. {openshock_autoflasher-0.2.0 → openshock_autoflasher-0.2.1}/tests/test_cli.py +0 -0
  24. {openshock_autoflasher-0.2.0 → openshock_autoflasher-0.2.1}/tests/test_constants.py +0 -0
  25. {openshock_autoflasher-0.2.0 → openshock_autoflasher-0.2.1}/tests/test_flasher.py +0 -0
  26. {openshock_autoflasher-0.2.0 → openshock_autoflasher-0.2.1}/tests/test_styles.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: OpenShock-AutoFlasher
3
- Version: 0.2.0
3
+ Version: 0.2.1
4
4
  Summary: Automatically flash OpenShock firmware to ESP32 devices
5
5
  Author: NanashiTheNameless
6
6
  Author-email: NanashiTheNameless <NanashiTheNameless@NamelessNanashi.dev>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: OpenShock-AutoFlasher
3
- Version: 0.2.0
3
+ Version: 0.2.1
4
4
  Summary: Automatically flash OpenShock firmware to ESP32 devices
5
5
  Author: NanashiTheNameless
6
6
  Author-email: NanashiTheNameless <NanashiTheNameless@NamelessNanashi.dev>
@@ -236,16 +236,31 @@ class AutoFlasher:
236
236
  break
237
237
  raw.extend(byte)
238
238
 
239
- for line in raw.decode("utf-8", errors="ignore").splitlines():
240
- line = line.strip()
239
+ decoded = raw.decode("utf-8", errors="ignore")
240
+ # Normalize \r\n and bare \r to \n so splitlines doesn't
241
+ # duplicate content on carriage-return-only line endings.
242
+ decoded = decoded.replace("\r\n", "\n").replace("\r", "\n")
243
+ seen: Set[str] = set()
244
+ for line in decoded.splitlines():
245
+ # Strip all non-printable characters (including null bytes that
246
+ # .strip() won't remove), then trim whitespace.
247
+ line = "".join(c for c in line if c.isprintable()).strip()
241
248
  if not line or line == cmd:
242
249
  continue
250
+ # Filter lines that are entirely one repeated character (e.g. "xxxxx...")
251
+ if len(set(line)) == 1:
252
+ continue
243
253
  if line.startswith(">"):
244
254
  line = line[1:].strip()
245
255
  if line.startswith(cmd):
246
256
  line = line[len(cmd) :].strip()
247
- if line:
248
- response_lines.append(line)
257
+ if not line:
258
+ continue
259
+ # Deduplicate identical lines (device can echo same line many times)
260
+ if line in seen:
261
+ continue
262
+ seen.add(line)
263
+ response_lines.append(line)
249
264
 
250
265
  if response_lines:
251
266
  self.log(f"Response: {' '.join(response_lines)}")
@@ -412,7 +427,7 @@ class AutoFlasher:
412
427
 
413
428
  # Print header with background
414
429
  _pkg_version = importlib.metadata.version("OpenShock-AutoFlasher")
415
- self.log(f"OpenShock Auto-Flasher v{_pkg_version}")
430
+ self.log(f"OpenShock Auto-Flasher {_pkg_version}")
416
431
  self.log("=" * 60)
417
432
  self.log(f"Channel: {self.channel}")
418
433
  self.log(f"Erase flash: {self.erase_flash}")
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "OpenShock-AutoFlasher"
3
- version = "0.2.0"
3
+ version = "0.2.1"
4
4
  description = "Automatically flash OpenShock firmware to ESP32 devices"
5
5
  readme = "README.md"
6
6
  license = { text = "AGPL-3.0" }