dronecot 2.3.9__tar.gz → 2.3.10__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 (44) hide show
  1. {dronecot-2.3.9 → dronecot-2.3.10}/CHANGELOG.md +5 -0
  2. {dronecot-2.3.9/dronecot.egg-info → dronecot-2.3.10}/PKG-INFO +1 -1
  3. {dronecot-2.3.9 → dronecot-2.3.10/dronecot.egg-info}/PKG-INFO +1 -1
  4. dronecot-2.3.10/src/dronecot/VERSION +1 -0
  5. {dronecot-2.3.9 → dronecot-2.3.10}/src/dronecot/functions.py +8 -1
  6. {dronecot-2.3.9 → dronecot-2.3.10}/tests/test_functions.py +30 -0
  7. {dronecot-2.3.9 → dronecot-2.3.10}/tests/test_status.py +4 -1
  8. dronecot-2.3.9/src/dronecot/VERSION +0 -1
  9. {dronecot-2.3.9 → dronecot-2.3.10}/LICENSE +0 -0
  10. {dronecot-2.3.9 → dronecot-2.3.10}/MANIFEST.in +0 -0
  11. {dronecot-2.3.9 → dronecot-2.3.10}/README.md +0 -0
  12. {dronecot-2.3.9 → dronecot-2.3.10}/dronecot.egg-info/SOURCES.txt +0 -0
  13. {dronecot-2.3.9 → dronecot-2.3.10}/dronecot.egg-info/dependency_links.txt +0 -0
  14. {dronecot-2.3.9 → dronecot-2.3.10}/dronecot.egg-info/entry_points.txt +0 -0
  15. {dronecot-2.3.9 → dronecot-2.3.10}/dronecot.egg-info/requires.txt +0 -0
  16. {dronecot-2.3.9 → dronecot-2.3.10}/dronecot.egg-info/top_level.txt +0 -0
  17. {dronecot-2.3.9 → dronecot-2.3.10}/setup.cfg +0 -0
  18. {dronecot-2.3.9 → dronecot-2.3.10}/setup.py +0 -0
  19. {dronecot-2.3.9 → dronecot-2.3.10}/src/dronecot/__init__.py +0 -0
  20. {dronecot-2.3.9 → dronecot-2.3.10}/src/dronecot/ble_capture.py +0 -0
  21. {dronecot-2.3.9 → dronecot-2.3.10}/src/dronecot/ble_parse.py +0 -0
  22. {dronecot-2.3.9 → dronecot-2.3.10}/src/dronecot/bluez_capture.py +0 -0
  23. {dronecot-2.3.9 → dronecot-2.3.10}/src/dronecot/classes.py +0 -0
  24. {dronecot-2.3.9 → dronecot-2.3.10}/src/dronecot/commands.py +0 -0
  25. {dronecot-2.3.9 → dronecot-2.3.10}/src/dronecot/constants.py +0 -0
  26. {dronecot-2.3.9 → dronecot-2.3.10}/src/dronecot/dji_exceptions.py +0 -0
  27. {dronecot-2.3.9 → dronecot-2.3.10}/src/dronecot/dji_functions.py +0 -0
  28. {dronecot-2.3.9 → dronecot-2.3.10}/src/dronecot/dji_text_parser.py +0 -0
  29. {dronecot-2.3.9 → dronecot-2.3.10}/src/dronecot/odid.py +0 -0
  30. {dronecot-2.3.9 → dronecot-2.3.10}/src/dronecot/open_drone_id.py +0 -0
  31. {dronecot-2.3.9 → dronecot-2.3.10}/src/dronecot/rid_normalize.py +0 -0
  32. {dronecot-2.3.9 → dronecot-2.3.10}/src/dronecot/rid_track.py +0 -0
  33. {dronecot-2.3.9 → dronecot-2.3.10}/src/dronecot/udp_rid.py +0 -0
  34. {dronecot-2.3.9 → dronecot-2.3.10}/src/dronecot/wifi_capture.py +0 -0
  35. {dronecot-2.3.9 → dronecot-2.3.10}/src/dronecot/wifi_parse.py +0 -0
  36. {dronecot-2.3.9 → dronecot-2.3.10}/tests/test_adsb_vehicle.py +0 -0
  37. {dronecot-2.3.9 → dronecot-2.3.10}/tests/test_bluez_capture.py +0 -0
  38. {dronecot-2.3.9 → dronecot-2.3.10}/tests/test_dji_listener.py +0 -0
  39. {dronecot-2.3.9 → dronecot-2.3.10}/tests/test_mavlink_identity.py +0 -0
  40. {dronecot-2.3.9 → dronecot-2.3.10}/tests/test_rid_normalize.py +0 -0
  41. {dronecot-2.3.9 → dronecot-2.3.10}/tests/test_rid_track.py +0 -0
  42. {dronecot-2.3.9 → dronecot-2.3.10}/tests/test_sensor_detail.py +0 -0
  43. {dronecot-2.3.9 → dronecot-2.3.10}/tests/test_serial_crlf.py +0 -0
  44. {dronecot-2.3.9 → dronecot-2.3.10}/tests/test_wifi_parse.py +0 -0
@@ -1,3 +1,8 @@
1
+ ## DroneCOT 2.3.10
2
+
3
+ - Add `SENSOR_BEACON=0` to disable the periodic receiver marker without
4
+ disabling drone tracks.
5
+
1
6
  ## DroneCOT 2.3.8
2
7
 
3
8
  - Add opt-in `SERIAL_CRLF_NORMALIZE` support for receivers that send binary
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dronecot
3
- Version: 2.3.9
3
+ Version: 2.3.10
4
4
  Summary: Display Drones in Team Awareness Kit (TAK).
5
5
  Home-page: https://github.com/snstac/dronecot
6
6
  Maintainer: Greg Albrecht <oss@undef.net>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dronecot
3
- Version: 2.3.9
3
+ Version: 2.3.10
4
4
  Summary: Display Drones in Team Awareness Kit (TAK).
5
5
  Home-page: https://github.com/snstac/dronecot
6
6
  Maintainer: Greg Albrecht <oss@undef.net>
@@ -0,0 +1 @@
1
+ 2.3.10
@@ -65,6 +65,12 @@ _DJI_Logger = logging.getLogger(__name__)
65
65
  APP_NAME = "dronecot"
66
66
 
67
67
 
68
+ def sensor_beacon_enabled(config: Union[dict, SectionProxy]) -> bool:
69
+ """Return whether the periodic receiver beacon is enabled."""
70
+ value = config.get("SENSOR_BEACON", "1")
71
+ return str(value).strip().lower() not in {"0", "false", "no", "off"}
72
+
73
+
68
74
  def _pacific_timestamp() -> str:
69
75
  """Return a human-readable last-seen timestamp, falling back if tzdata is absent."""
70
76
  try:
@@ -160,7 +166,8 @@ def create_tasks(config: SectionProxy, clitool: pytak.CLITool) -> Set[pytak.Work
160
166
  if config.get("ENABLE_RX_MOCK", "0") == "1":
161
167
  tasks.add(dronecot.RXMockWorker(clitool.rx_queue, config))
162
168
 
163
- tasks.add(dronecot.SensorWorker(clitool.tx_queue, config))
169
+ if sensor_beacon_enabled(config):
170
+ tasks.add(dronecot.SensorWorker(clitool.tx_queue, config))
164
171
 
165
172
  return tasks
166
173
 
@@ -16,9 +16,12 @@
16
16
 
17
17
  """DroneCOT Function Tests."""
18
18
 
19
+ import asyncio
19
20
  import json
20
21
  import os
21
22
  import unittest
23
+ from types import SimpleNamespace
24
+ from unittest.mock import patch
22
25
 
23
26
  import xml.etree.ElementTree as ET
24
27
 
@@ -45,6 +48,33 @@ def load_sample_data(file_path, line=0):
45
48
 
46
49
 
47
50
  class FunctionsTestCase(unittest.TestCase):
51
+ def test_sensor_beacon_switch(self):
52
+ """Receiver beacons default on and accept common false values."""
53
+ enabled = dronecot.functions.sensor_beacon_enabled
54
+ self.assertTrue(enabled({}))
55
+ for value in ("0", "false", "False", "no", "off"):
56
+ with self.subTest(value=value):
57
+ self.assertFalse(enabled({"SENSOR_BEACON": value}))
58
+
59
+ def test_create_tasks_can_omit_sensor_beacon(self):
60
+ """Disabling the receiver beacon keeps drone processing enabled."""
61
+ clitool = SimpleNamespace(tx_queue=object())
62
+ config = {"FEED_URL": "serial:///dev/ttyACM0", "SENSOR_BEACON": "0"}
63
+ loop = asyncio.new_event_loop()
64
+ try:
65
+ asyncio.set_event_loop(loop)
66
+ with patch.object(dronecot, "SerialWorker", return_value="serial"):
67
+ with patch.object(dronecot, "RIDWorker", return_value="tracks"):
68
+ with patch.object(
69
+ dronecot, "SensorWorker", return_value="receiver"
70
+ ) as sensor_worker:
71
+ tasks = dronecot.functions.create_tasks(config, clitool)
72
+ finally:
73
+ asyncio.set_event_loop(None)
74
+ loop.close()
75
+ self.assertEqual(tasks, {"serial", "tracks"})
76
+ sensor_worker.assert_not_called()
77
+
48
78
  """
49
79
  Test class for functions... functions.
50
80
  """
@@ -216,7 +216,10 @@ class TestDJIStatusSurface:
216
216
  def _worker(self, tmp_path):
217
217
  worker = classes.DJIWorker.__new__(classes.DJIWorker)
218
218
  worker.config = {"FEED_URL": "tcp://172.31.100.2:52002"}
219
- worker.net_queue = asyncio.Queue()
219
+ # handle_data does not consume net_queue. Keeping this synthetic worker
220
+ # loop-free also works on Python 3.9 after an earlier asyncio.run()
221
+ # closes and clears the process-wide default loop.
222
+ worker.net_queue = None
220
223
  worker._logger = logging.getLogger("test")
221
224
  worker.status = pytak.StatusWriter(
222
225
  "dronecot-test", path=str(tmp_path / "status.json")
@@ -1 +0,0 @@
1
- 2.3.9
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes