not1mm 25.6.12__py3-none-any.whl → 25.6.13__py3-none-any.whl

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.
not1mm/data/rotator.ui CHANGED
@@ -29,16 +29,65 @@
29
29
  </property>
30
30
  <item>
31
31
  <layout class="QHBoxLayout" name="horizontalLayout">
32
+ <item>
33
+ <widget class="QPushButton" name="stop_button">
34
+ <property name="styleSheet">
35
+ <string notr="true">padding-left: 10px; padding-top: 5px; padding-right: 10px; padding-bottom: 5px;</string>
36
+ </property>
37
+ <property name="text">
38
+ <string>Stop</string>
39
+ </property>
40
+ </widget>
41
+ </item>
42
+ <item>
43
+ <spacer name="horizontalSpacer_3">
44
+ <property name="orientation">
45
+ <enum>Qt::Orientation::Horizontal</enum>
46
+ </property>
47
+ <property name="sizeHint" stdset="0">
48
+ <size>
49
+ <width>40</width>
50
+ <height>20</height>
51
+ </size>
52
+ </property>
53
+ </spacer>
54
+ </item>
32
55
  <item>
33
56
  <widget class="QPushButton" name="move_button">
34
57
  <property name="focusPolicy">
35
58
  <enum>Qt::FocusPolicy::NoFocus</enum>
36
59
  </property>
60
+ <property name="styleSheet">
61
+ <string notr="true">padding-left: 10px; padding-top: 5px; padding-right: 10px; padding-bottom: 5px;</string>
62
+ </property>
37
63
  <property name="text">
38
64
  <string>Move</string>
39
65
  </property>
40
66
  </widget>
41
67
  </item>
68
+ <item>
69
+ <spacer name="horizontalSpacer_4">
70
+ <property name="orientation">
71
+ <enum>Qt::Orientation::Horizontal</enum>
72
+ </property>
73
+ <property name="sizeHint" stdset="0">
74
+ <size>
75
+ <width>40</width>
76
+ <height>20</height>
77
+ </size>
78
+ </property>
79
+ </spacer>
80
+ </item>
81
+ <item>
82
+ <widget class="QPushButton" name="park_button">
83
+ <property name="styleSheet">
84
+ <string notr="true">padding-left: 10px; padding-top: 5px; padding-right: 10px; padding-bottom: 5px;</string>
85
+ </property>
86
+ <property name="text">
87
+ <string>Park</string>
88
+ </property>
89
+ </widget>
90
+ </item>
42
91
  </layout>
43
92
  </item>
44
93
  <item>
@@ -74,9 +123,18 @@
74
123
  </item>
75
124
  <item>
76
125
  <widget class="QPushButton" name="north_button">
126
+ <property name="sizePolicy">
127
+ <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
128
+ <horstretch>0</horstretch>
129
+ <verstretch>0</verstretch>
130
+ </sizepolicy>
131
+ </property>
77
132
  <property name="focusPolicy">
78
133
  <enum>Qt::FocusPolicy::NoFocus</enum>
79
134
  </property>
135
+ <property name="styleSheet">
136
+ <string notr="true">padding-left: 10px; padding-top: 5px; padding-right: 10px; padding-bottom: 5px;</string>
137
+ </property>
80
138
  <property name="text">
81
139
  <string>N</string>
82
140
  </property>
@@ -86,6 +144,12 @@
86
144
  <height>16</height>
87
145
  </size>
88
146
  </property>
147
+ <property name="autoDefault">
148
+ <bool>false</bool>
149
+ </property>
150
+ <property name="default">
151
+ <bool>false</bool>
152
+ </property>
89
153
  <property name="flat">
90
154
  <bool>false</bool>
91
155
  </property>
@@ -96,6 +160,9 @@
96
160
  <property name="focusPolicy">
97
161
  <enum>Qt::FocusPolicy::NoFocus</enum>
98
162
  </property>
163
+ <property name="styleSheet">
164
+ <string notr="true">padding-left: 10px; padding-top: 5px; padding-right: 10px; padding-bottom: 5px;</string>
165
+ </property>
99
166
  <property name="text">
100
167
  <string>S</string>
101
168
  </property>
@@ -106,6 +173,9 @@
106
173
  <property name="focusPolicy">
107
174
  <enum>Qt::FocusPolicy::NoFocus</enum>
108
175
  </property>
176
+ <property name="styleSheet">
177
+ <string notr="true">padding-left: 10px; padding-top: 5px; padding-right: 10px; padding-bottom: 5px;</string>
178
+ </property>
109
179
  <property name="text">
110
180
  <string>W</string>
111
181
  </property>
@@ -116,6 +186,9 @@
116
186
  <property name="focusPolicy">
117
187
  <enum>Qt::FocusPolicy::NoFocus</enum>
118
188
  </property>
189
+ <property name="styleSheet">
190
+ <string notr="true">padding-left: 10px; padding-top: 5px; padding-right: 10px; padding-bottom: 5px;</string>
191
+ </property>
119
192
  <property name="text">
120
193
  <string>E</string>
121
194
  </property>
@@ -13,13 +13,13 @@ class RotatorInterface:
13
13
  """
14
14
 
15
15
  def __init__(self, host="127.0.0.1", port=4533):
16
- self.host = host
17
- self.port = port
18
- self.socket = None
19
- self.connected = False
16
+ self.host: str = host
17
+ self.port: int = port
18
+ self.socket: socket.socket | None = None
19
+ self.connected: bool = False
20
20
  self.connect()
21
21
 
22
- def connect(self):
22
+ def connect(self) -> None:
23
23
  """Connect to the rotator control program."""
24
24
  try:
25
25
  self.socket = socket.create_connection((self.host, self.port), timeout=1)
@@ -32,9 +32,9 @@ class RotatorInterface:
32
32
  )
33
33
  self.socket = None
34
34
 
35
- def disconnect(self):
35
+ def disconnect(self) -> None:
36
36
  """Disconnect from the rotator control program."""
37
- if self.socket:
37
+ if isinstance(self.socket, socket.socket):
38
38
  try:
39
39
  self.socket.close()
40
40
  logger.info("Disconnected from rotator")
@@ -43,11 +43,11 @@ class RotatorInterface:
43
43
  self.socket = None
44
44
  self.connected = False
45
45
 
46
- def send_command(self, command):
46
+ def send_command(self, command) -> str | None:
47
47
  """Send a command to the rotator control program and return the response."""
48
- if not self.connected or not self.socket:
48
+ if self.connected is False or self.socket is None:
49
49
  self.connect()
50
- if not self.connected or not self.socket:
50
+ if self.connected is False or self.socket is None:
51
51
  logger.warning("Not connected to rotator. Command not sent.")
52
52
  return None
53
53
 
@@ -61,11 +61,11 @@ class RotatorInterface:
61
61
  self.disconnect()
62
62
  return None
63
63
 
64
- def get_position(self):
64
+ def get_position(self) -> tuple[float, float] | None:
65
65
  """Get the current azimuth and elevation from the rotator."""
66
66
  response = self.send_command("p")
67
67
  logger.debug(f"get_position response: {response}")
68
- if response:
68
+ if response is not None:
69
69
  if response == "RPRT -1":
70
70
  return None, None
71
71
  try:
not1mm/lib/version.py CHANGED
@@ -1,3 +1,3 @@
1
1
  """It's the version"""
2
2
 
3
- __version__ = "25.6.12"
3
+ __version__ = "25.6.13"
not1mm/rotator.py CHANGED
@@ -1,4 +1,9 @@
1
- from PyQt6.QtWidgets import QDockWidget, QGraphicsScene
1
+ from PyQt6.QtWidgets import (
2
+ QDockWidget,
3
+ QGraphicsScene,
4
+ QGraphicsPathItem,
5
+ QGraphicsPixmapItem,
6
+ )
2
7
 
3
8
  from PyQt6.QtGui import (
4
9
  QImage,
@@ -24,32 +29,33 @@ logger = logging.getLogger(__name__)
24
29
 
25
30
 
26
31
  class RotatorWindow(QDockWidget):
27
- message = pyqtSignal(dict)
28
- pref = {}
29
- MAP_RESOLUTION = 600
30
- GLOBE_RADIUS = 100.0
31
- AZIMUTH_DEAD_BAND = 2
32
- requestedAzimuthNeedle = None
33
- antennaNeedle = None
32
+ message: pyqtSignal = pyqtSignal(dict)
33
+ pref: dict = {}
34
+ MAP_RESOLUTION: int = 600
35
+ GLOBE_RADIUS: float = 100.0
36
+ requestedAzimuthNeedle: QGraphicsPathItem | None = None
37
+ antennaNeedle: QGraphicsPathItem | None = None
34
38
 
35
39
  def __init__(self):
36
40
  super().__init__()
37
- self.active = False
38
- self.compassScene = None
39
- self.mygrid = "DM13at"
40
- self.requestedAzimuth = None
41
- self.antennaAzimuth = None
41
+ self.active: bool = False
42
+ self.compassScene: QGraphicsScene | None = None
43
+ self.mygrid: str = "DM13at"
44
+ self.requestedAzimuth: float | None = None
45
+ self.antennaAzimuth: float | None = None
42
46
  uic.loadUi(fsutils.APP_DATA_PATH / "rotator.ui", self)
43
47
  self.north_button.clicked.connect(self.set_north_azimuth)
44
48
  self.south_button.clicked.connect(self.set_south_azimuth)
45
49
  self.east_button.clicked.connect(self.set_east_azimuth)
46
50
  self.west_button.clicked.connect(self.set_west_azimuth)
47
51
  self.move_button.clicked.connect(self.the_eye_of_sauron)
52
+ self.stop_button.clicked.connect(lambda x: self.rotator.send_command("S"))
53
+ self.park_button.clicked.connect(lambda x: self.rotator.send_command("K"))
48
54
  self.redrawMap()
49
- self.rotator = RotatorInterface()
55
+ self.rotator: RotatorInterface = RotatorInterface()
50
56
  self.antennaAzimuth, _ = self.rotator.get_position()
51
57
  self.set_antenna_azimuth(self.antennaAzimuth)
52
- self.watch_timer = QTimer()
58
+ self.watch_timer: QTimer = QTimer()
53
59
  self.watch_timer.timeout.connect(self.check_rotator)
54
60
  self.watch_timer.start(1000)
55
61
 
@@ -115,13 +121,13 @@ class RotatorWindow(QDockWidget):
115
121
 
116
122
  def redrawMap(self) -> None:
117
123
  """"""
118
- self.compassScene = QGraphicsScene()
124
+ self.compassScene: QGraphicsScene = QGraphicsScene()
119
125
  self.compassView.setScene(self.compassScene)
120
126
  self.compassView.setStyleSheet("background-color: transparent;")
121
127
  file = fsutils.APP_DATA_PATH / "map3.png"
122
- source = QImage()
128
+ source: QImage = QImage()
123
129
  source.load(str(file))
124
- the_map = QImage(
130
+ the_map: QImage = QImage(
125
131
  self.MAP_RESOLUTION, self.MAP_RESOLUTION, QImage.Format.Format_ARGB32
126
132
  )
127
133
  the_map.fill(QColor(0, 0, 0, 0))
@@ -134,12 +140,17 @@ class RotatorWindow(QDockWidget):
134
140
  source, lat, lon, output_size=self.MAP_RESOLUTION
135
141
  )
136
142
 
137
- pixMapItem = self.compassScene.addPixmap(QPixmap.fromImage(the_map))
138
- pixMapItem.moveBy(-self.MAP_RESOLUTION / 2, -self.MAP_RESOLUTION / 2)
139
- pixMapItem.setTransformOriginPoint(
140
- self.MAP_RESOLUTION / 2, self.MAP_RESOLUTION / 2
143
+ pixMapItem: QGraphicsPixmapItem | None = self.compassScene.addPixmap(
144
+ QPixmap.fromImage(the_map)
141
145
  )
142
- pixMapItem.setScale(self.GLOBE_RADIUS * 2 / self.MAP_RESOLUTION)
146
+ if pixMapItem is None:
147
+ logging.error("Unable to add pixmap to scene")
148
+ else:
149
+ pixMapItem.moveBy(-self.MAP_RESOLUTION / 2, -self.MAP_RESOLUTION / 2)
150
+ pixMapItem.setTransformOriginPoint(
151
+ self.MAP_RESOLUTION / 2, self.MAP_RESOLUTION / 2
152
+ )
153
+ pixMapItem.setScale(self.GLOBE_RADIUS * 2 / self.MAP_RESOLUTION)
143
154
  self.compassScene.addEllipse(
144
155
  -100,
145
156
  -100,
@@ -156,36 +167,41 @@ class RotatorWindow(QDockWidget):
156
167
  QPen(Qt.PenStyle.NoPen),
157
168
  QBrush(QColor(0, 0, 0), Qt.BrushStyle.SolidPattern),
158
169
  )
159
- path = QPainterPath()
170
+ path: QPainterPath = QPainterPath()
160
171
  path.lineTo(-4, 0)
161
172
  path.lineTo(0, -90)
162
173
  path.lineTo(4, 0)
163
174
  path.closeSubpath()
164
175
 
165
- path2 = QPainterPath()
166
- path2.lineTo(-1, 0)
167
- path2.lineTo(0, -90)
168
- path2.lineTo(1, 0)
169
- path2.closeSubpath()
170
-
171
- self.requestedAzimuthNeedle = self.compassScene.addPath(
172
- path,
173
- QPen(QColor(0, 0, 0, 150)),
174
- QBrush(QColor(0, 0, 255), Qt.BrushStyle.SolidPattern),
176
+ # path2: QPainterPath = QPainterPath()
177
+ # path2.lineTo(-1, 0)
178
+ # path2.lineTo(0, -90)
179
+ # path2.lineTo(1, 0)
180
+ # path2.closeSubpath()
181
+
182
+ self.requestedAzimuthNeedle: QGraphicsPathItem | None = (
183
+ self.compassScene.addPath(
184
+ path,
185
+ QPen(QColor(0, 0, 0, 150)),
186
+ QBrush(QColor(0, 0, 255), Qt.BrushStyle.SolidPattern),
187
+ )
175
188
  )
176
189
 
177
- if isinstance(self.requestedAzimuth, float):
190
+ if (
191
+ isinstance(self.requestedAzimuth, float)
192
+ and self.requestedAzimuthNeedle is not None
193
+ ):
178
194
  self.requestedAzimuthNeedle.setRotation(self.requestedAzimuth)
179
195
  self.requestedAzimuthNeedle.show()
180
196
  else:
181
197
  self.requestedAzimuthNeedle.hide()
182
198
 
183
- self.antennaNeedle = self.compassScene.addPath(
199
+ self.antennaNeedle: QGraphicsPathItem | None = self.compassScene.addPath(
184
200
  path,
185
201
  QPen(QColor(0, 0, 0, 150)),
186
202
  QBrush(QColor(255, 191, 0), Qt.BrushStyle.SolidPattern),
187
203
  )
188
- if isinstance(self.antennaAzimuth, float):
204
+ if isinstance(self.antennaAzimuth, float) and self.antennaNeedle is not None:
189
205
  self.antennaNeedle.setRotation(self.antennaAzimuth)
190
206
  self.antennaNeedle.show()
191
207
  else:
@@ -196,11 +212,11 @@ class RotatorWindow(QDockWidget):
196
212
  Converts a maidenhead gridsquare to a latitude longitude pair.
197
213
  """
198
214
  try:
199
- maiden = str(maiden).strip().upper()
215
+ maiden: str = str(maiden).strip().upper()
200
216
 
201
- chars_in_grid_square = len(maiden)
217
+ chars_in_grid_square: int = len(maiden)
202
218
  if not 8 >= chars_in_grid_square >= 2 and chars_in_grid_square % 2 == 0:
203
- return 0, 0
219
+ return 0.0, 0.0
204
220
  lon = (ord(maiden[0]) - 65) * 20 - 180
205
221
  lat = (ord(maiden[1]) - 65) * 10 - 90
206
222
  if chars_in_grid_square >= 4:
@@ -224,7 +240,7 @@ class RotatorWindow(QDockWidget):
224
240
  lon += 10
225
241
  lat += 5
226
242
 
227
- return lat, lon
243
+ return float(lat), float(lon)
228
244
  except IndexError:
229
245
  return 0.0, 0.0
230
246
 
@@ -238,16 +254,16 @@ class RotatorWindow(QDockWidget):
238
254
  """This does some super magic"""
239
255
 
240
256
  width, height = source_img.width(), source_img.height()
241
- dest_img = QImage(output_size, output_size, QImage.Format.Format_ARGB32)
257
+ dest_img: QImage = QImage(output_size, output_size, QImage.Format.Format_ARGB32)
242
258
 
243
259
  # Convert center point to radians
244
- lat0 = math.radians(center_lat_deg)
245
- lon0 = math.radians(center_lon_deg)
260
+ lat0: float = math.radians(center_lat_deg)
261
+ lon0: float = math.radians(center_lon_deg)
246
262
 
247
- sin_lat = math.sin(lat0)
248
- cos_lat = math.cos(lat0)
263
+ sin_lat: float = math.sin(lat0)
264
+ cos_lat: float = math.cos(lat0)
249
265
 
250
- R = output_size / 2
266
+ R: float = output_size / 2
251
267
  for y in range(output_size):
252
268
  for x in range(output_size):
253
269
  # Convert pixel coordinate to normalized cartesian coordinate in range [-1, 1]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: not1mm
3
- Version: 25.6.12
3
+ Version: 25.6.13
4
4
  Summary: NOT1MM Logger
5
5
  Author-email: Michael Bridak <michael.bridak@gmail.com>
6
6
  License: GPL-3.0-or-later
@@ -246,6 +246,7 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
246
246
 
247
247
  ## Recent Changes
248
248
 
249
+ - [25-6-13] Polished up the Rotator window. Adding Stop and Park. Made the NSWE buttons smaller.
249
250
  - [25-6-12] Account for no gridsquare being returned from lookup service.
250
251
  - [25-6-11] Added a rotator control widget.
251
252
  - [25-6-10] Merged PR from @dj1yfk correcting WPX prefix calculation.
@@ -703,13 +704,32 @@ This window shows you a grid of DXCC entities you've aquired and on what bands.
703
704
 
704
705
  `Window`>`Rotator`
705
706
 
706
- The Rotator window is a work in progress. Currently it blindly connects to a rigctld
707
- instance on it's default port of 4533.
707
+ The Rotator window is a work in progress. The Rotator window relies on the functionality
708
+ of the rotctld daemon. It connects to rotctld over it's default port of 4533. If started
709
+ and there is no connection, you will see this:
708
710
 
709
- ![Rotator Window](https://github.com/mbridak/not1mm/raw/master/pic/rotator_window.png)
711
+ ![Rotator Window](https://github.com/mbridak/not1mm/raw/master/pic/rot1.png)
710
712
 
711
- I myself don't have a rotator to test with. I'm a QRP wires in the trees, if only I
712
- had a tree, kind of guy. So we're kind of hoping this works. If not, don't use it.
713
+ Once there is a connection to rotctld, the current azimuth of the antenna is obtained and
714
+ you will see a direction needle apear:
715
+
716
+ ![Rotator Window](https://github.com/mbridak/not1mm/raw/master/pic/rot2.png)
717
+
718
+ Once a call is entered and the bearing to contact is calculated you will see another needle
719
+ appear:
720
+
721
+ ![Rotator Window](https://github.com/mbridak/not1mm/raw/master/pic/rot3.png)
722
+
723
+ At this time you can click on the 'Move' button to point your antenna at the contact. A list
724
+ of other buttons follows below.
725
+
726
+ Move: Rotates the antenna at the target.
727
+
728
+ Stop: Stops the current movement.
729
+
730
+ Park: Parks the antenna.
731
+
732
+ N,S,W,E: Points the antenna to one of the 4 cardinal directions.
713
733
 
714
734
  ### The Remote VFO Window
715
735
 
@@ -8,7 +8,7 @@ not1mm/logwindow.py,sha256=O2dMaT_BYWsXA_dxsEHN92JwN-qVGy9nmH0MCMaG9gY,42830
8
8
  not1mm/lookupservice.py,sha256=GkY_qHZfrW6XHf8upIoaG4hCFqm0fg6Ganu9ConGrIc,2628
9
9
  not1mm/radio.py,sha256=4Lysf9BY3vdtYCHwKfzO5WN7IGyh4_lKSVuQ6F4Z08g,5536
10
10
  not1mm/ratewindow.py,sha256=iBjqdOetIEX0wSwdGM89Ibt4gVlFdE-K8HQPnkVPVOg,6965
11
- not1mm/rotator.py,sha256=9HjhrlbeYFhNOjvCPmmoWMfRtbQ6ReYHMDJm6EPKrJo,11200
11
+ not1mm/rotator.py,sha256=JNQnQUComEiQ4dudXvo9nPXvkaRAegPUWPpB4Y1Ggn4,12093
12
12
  not1mm/rtc_service.py,sha256=axAwnCBuTr-QL0YwXtWvg9tjwhcFsiiEZFgFjOofX6k,2816
13
13
  not1mm/statistics.py,sha256=eOmUvbbYdbbIYHmaEhtBGab1IxAf2RQYV1q9MItpqEM,7969
14
14
  not1mm/test.py,sha256=WhL0DLlJTD15aON8Dkf2q_tlP_X1juxKZJh0jEC99tU,154
@@ -49,7 +49,7 @@ not1mm/data/radio_grey.png,sha256=9eOtMHDpQvRYY29D7_vPeacWbwotRXZTMm8EiHE9TW0,12
49
49
  not1mm/data/radio_red.png,sha256=QvkMk7thd_hCEIyK5xGAG4xVVXivl39nwOfD8USDI20,957
50
50
  not1mm/data/ratewindow.ui,sha256=c0gikcZQYWuGwWdFE1PGcRbeJ9nTUPIRkOozWo2FQw8,11541
51
51
  not1mm/data/reddot.png,sha256=M33jEMoU8W4rQ4_MVyzzKxDPDte1ypKBch5VnUMNLKE,565
52
- not1mm/data/rotator.ui,sha256=GcyEsb1TOQwp4g02jfCxsQRr8WkC7L4Bm5TTyvkk7hE,3935
52
+ not1mm/data/rotator.ui,sha256=BuWDzo3R68bDT4cbhQxqjVWzu_QRueuFf4ov3AbGcqc,6606
53
53
  not1mm/data/rttymacros.txt,sha256=FQ2BnAChXF5w-tzmMnBOE8IgvviAEsd3cmmz4b8GOPk,467
54
54
  not1mm/data/settings.ui,sha256=0nAdg4hDv37x0RL5G0Cc1L8p-F95YtkOjIGqlCGu0Fs,40073
55
55
  not1mm/data/splash.png,sha256=85_BQotR1q24uCthrKm4SB_6ZOMwRjR-Jdp1XBHSTyg,5368
@@ -122,11 +122,11 @@ not1mm/lib/multicast.py,sha256=KJcruI-bOuHfHXPjl3SGQhL6I9sKrygy-sdFSvxffUM,3255
122
122
  not1mm/lib/n1mm.py,sha256=H54mpgJF0GAmKavM-nb5OAq2SJFWYkux4eMWWiSRxJc,6288
123
123
  not1mm/lib/new_contest.py,sha256=IznTDMq7yXHB6zBoGUEC_WDYPCPpsSZW4wwMJi16zK0,816
124
124
  not1mm/lib/plugin_common.py,sha256=nqiUq11T9Wz8RDrRen4Zvp-KXVWUYcIp5JPZwqmu2Oo,13913
125
- not1mm/lib/rot_interface.py,sha256=kGhpRsxPa6MYDaHd7gLJfzgsJKiJ-qHyx8tJ2tWwwlk,3589
125
+ not1mm/lib/rot_interface.py,sha256=bOyxpV9pQHORUY5qfNZE2QAV1V71QEG2jooiI2p9AwE,3744
126
126
  not1mm/lib/select_contest.py,sha256=WsptLuwkouIHeocJL3oZ6-eUfEnhpwdc-x7eMZ_TIVM,359
127
127
  not1mm/lib/settings.py,sha256=5xnsagH48qGeCDhfxPWW9yaXtv8wT13yoIVvYt8h_Qs,16023
128
128
  not1mm/lib/super_check_partial.py,sha256=jX7DjHesEV4KNVQbddJui0wAsYHerikH7W0iPv7PXQw,3110
129
- not1mm/lib/version.py,sha256=FOEOU2uNUEV5bJamF0b6Dxgv5dxKso-77okuXfp8vGs,48
129
+ not1mm/lib/version.py,sha256=MZm754tCMJPrW5XS3srtu2WCKJEPb4Lytw4PBd4QtUY,48
130
130
  not1mm/lib/versiontest.py,sha256=8vDNptuBBunn-1IGkjNaquehqBYUJyjrPSF8Igmd4_Y,1286
131
131
  not1mm/plugins/10_10_fall_cw.py,sha256=oJh3JKqjOpnWElSlZpiQ631UnaOd8qra5s9bl_QoInk,14783
132
132
  not1mm/plugins/10_10_spring_cw.py,sha256=p7dSDtbFK0e6Xouw2V6swYn3VFVgHKyx4IfRWyBjMZY,14786
@@ -190,9 +190,9 @@ not1mm/plugins/ukeidx.py,sha256=ZsIFXgOSwjuKNmN4W_C0TAgGqgnabJGNLMHwGkl3_bk,1910
190
190
  not1mm/plugins/vhf_sprint.py,sha256=a9QFTpv8XUbZ_GLjdVCh7svykFa-gXOWwKFZ6MD3uQM,19289
191
191
  not1mm/plugins/weekly_rtty.py,sha256=C8Xs3Q5UgSYx-mFFar8BVARWtmqlyrbeC98Ubzb4UN8,20128
192
192
  not1mm/plugins/winter_field_day.py,sha256=hmAMgkdqIXtnCNyUp8J9Bb8liN8wj10wps6ROuG-Bok,15284
193
- not1mm-25.6.12.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
194
- not1mm-25.6.12.dist-info/METADATA,sha256=2vdtH_bwu2Kjy8L58lqMQPNFOxiqZ1Iph6TIgjWzHi0,35752
195
- not1mm-25.6.12.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
196
- not1mm-25.6.12.dist-info/entry_points.txt,sha256=pMcZk_0dxFgLkcUkF0Q874ojpwOmF3OL6EKw9LgvocM,47
197
- not1mm-25.6.12.dist-info/top_level.txt,sha256=0YmTxEcDzQlzXub-lXASvoLpg_mt1c2thb5cVkDf5J4,7
198
- not1mm-25.6.12.dist-info/RECORD,,
193
+ not1mm-25.6.13.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
194
+ not1mm-25.6.13.dist-info/METADATA,sha256=iiVU3j19IsjaCEOVA4OG1bA26lASv3sI5T7evL0g91o,36455
195
+ not1mm-25.6.13.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
196
+ not1mm-25.6.13.dist-info/entry_points.txt,sha256=pMcZk_0dxFgLkcUkF0Q874ojpwOmF3OL6EKw9LgvocM,47
197
+ not1mm-25.6.13.dist-info/top_level.txt,sha256=0YmTxEcDzQlzXub-lXASvoLpg_mt1c2thb5cVkDf5J4,7
198
+ not1mm-25.6.13.dist-info/RECORD,,