not1mm 24.11.19__py3-none-any.whl → 24.11.23__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/__main__.py CHANGED
@@ -256,7 +256,7 @@ class MainWindow(QtWidgets.QMainWindow):
256
256
  self.actionNew_Database.triggered.connect(self.new_database)
257
257
  self.actionOpen_Database.triggered.connect(self.open_database)
258
258
 
259
- self.actionEdit_Macros.triggered.connect(self.edit_cw_macros)
259
+ self.actionEdit_Macros.triggered.connect(self.edit_macros)
260
260
 
261
261
  self.actionAbout.triggered.connect(self.show_about_dialog)
262
262
  self.actionHotKeys.triggered.connect(self.show_key_help)
@@ -659,7 +659,7 @@ class MainWindow(QtWidgets.QMainWindow):
659
659
  self.show_splash_msg("Loading contest.")
660
660
  self.load_contest()
661
661
  self.show_splash_msg("Reading macros.")
662
- self.read_cw_macros()
662
+ self.read_macros()
663
663
 
664
664
  self.show_splash_msg("Starting FlDigi watcher.")
665
665
  self.fldigi_watcher = FlDigiWatcher()
@@ -1627,6 +1627,7 @@ class MainWindow(QtWidgets.QMainWindow):
1627
1627
  cmd["COLUMNS"] = self.contest.columns
1628
1628
  if self.log_window:
1629
1629
  self.log_window.msg_from_main(cmd)
1630
+ self.read_macros()
1630
1631
 
1631
1632
  def check_for_new_cty(self) -> None:
1632
1633
  """
@@ -1971,6 +1972,8 @@ class MainWindow(QtWidgets.QMainWindow):
1971
1972
  if self.pref.get("cwtype") == 3 and self.rig_control is not None:
1972
1973
  if self.rig_control.interface == "flrig":
1973
1974
  self.rig_control.cat.set_flrig_cw_speed(self.cw_speed.value())
1975
+ elif self.rig_control.interface == "rigctld":
1976
+ self.rig_control.cat.set_rigctl_cw_speed(self.cw_speed.value())
1974
1977
 
1975
1978
  def stop_cw(self):
1976
1979
  """"""
@@ -2802,7 +2805,7 @@ class MainWindow(QtWidgets.QMainWindow):
2802
2805
  """
2803
2806
  self.pref["run_state"] = self.radioButton_run.isChecked()
2804
2807
  self.write_preference()
2805
- self.read_cw_macros()
2808
+ self.read_macros()
2806
2809
  self.check_esm()
2807
2810
 
2808
2811
  def write_preference(self) -> None:
@@ -3349,7 +3352,7 @@ class MainWindow(QtWidgets.QMainWindow):
3349
3352
  self.set_band_indicator(band)
3350
3353
  self.set_window_title()
3351
3354
  self.clearinputs()
3352
- self.read_cw_macros()
3355
+ self.read_macros()
3353
3356
  return
3354
3357
  if mode in (
3355
3358
  "DIGI-U",
@@ -3370,7 +3373,7 @@ class MainWindow(QtWidgets.QMainWindow):
3370
3373
  self.set_band_indicator(band)
3371
3374
  self.set_window_title()
3372
3375
  self.clearinputs()
3373
- self.read_cw_macros()
3376
+ self.read_macros()
3374
3377
  return
3375
3378
  if mode == "SSB":
3376
3379
  if intended_freq:
@@ -3391,7 +3394,7 @@ class MainWindow(QtWidgets.QMainWindow):
3391
3394
  self.set_band_indicator(band)
3392
3395
  self.set_window_title()
3393
3396
  self.clearinputs()
3394
- self.read_cw_macros()
3397
+ self.read_macros()
3395
3398
 
3396
3399
  def check_callsign(self, callsign) -> None:
3397
3400
  """
@@ -3478,7 +3481,7 @@ class MainWindow(QtWidgets.QMainWindow):
3478
3481
  self.current_mode = "CW"
3479
3482
  self.sent.setText("599")
3480
3483
  self.receive.setText("599")
3481
- self.read_cw_macros()
3484
+ self.read_macros()
3482
3485
  if self.contest:
3483
3486
  if self.contest.name == "ICWC Medium Speed Test":
3484
3487
  self.contest.prefill(self)
@@ -3488,14 +3491,14 @@ class MainWindow(QtWidgets.QMainWindow):
3488
3491
  self.current_mode = "SSB"
3489
3492
  self.sent.setText("59")
3490
3493
  self.receive.setText("59")
3491
- self.read_cw_macros()
3494
+ self.read_macros()
3492
3495
  return
3493
3496
  if mode in ("RTTY", "DIGI-U", "DIGI-L"):
3494
3497
  if self.current_mode != "RTTY":
3495
3498
  self.current_mode = "RTTY"
3496
3499
  self.sent.setText("599")
3497
3500
  self.receive.setText("599")
3498
- self.read_cw_macros()
3501
+ self.read_macros()
3499
3502
 
3500
3503
  def get_opon(self) -> None:
3501
3504
  """
@@ -3662,18 +3665,13 @@ class MainWindow(QtWidgets.QMainWindow):
3662
3665
  except TypeError as err:
3663
3666
  logger.debug(f"{err=} {vfo=} {the_dict=}")
3664
3667
 
3665
- def edit_cw_macros(self) -> None:
3666
- """
3667
- Calls the default text editor to edit the CW macro file.
3668
-
3669
- Parameters
3670
- ----------
3671
- None
3672
-
3673
- Returns
3674
- -------
3675
- None
3676
- """
3668
+ def get_macro_filename(self):
3669
+ """"""
3670
+ # Have not1mm check in USER_DATA_PATH for the existence of a folder with the contests name.
3671
+ # If it exists, check to see if a cw/ssb/rtty macro files exists within it and load them before
3672
+ # falling back to the default ones.
3673
+ # If user selects menu option to edit the current macro file, make the previous checks, if the
3674
+ # specific one does not exist, copy the default to the contest directory and edit that copy.
3677
3675
  if self.radio_state.get("mode") in ("CW", "CW-L", "CW-R", "CWR"):
3678
3676
  macro_file = "cwmacros.txt"
3679
3677
  elif self.radio_state.get("mode") in (
@@ -3693,8 +3691,14 @@ class MainWindow(QtWidgets.QMainWindow):
3693
3691
  macro_file = "rttymacros.txt"
3694
3692
  else:
3695
3693
  macro_file = "ssbmacros.txt"
3694
+
3695
+ try:
3696
+ if not (fsutils.USER_DATA_PATH / self.contest.name).exists():
3697
+ os.mkdir(fsutils.USER_DATA_PATH / self.contest.name)
3698
+ except AttributeError:
3699
+ return ""
3700
+
3696
3701
  if not (fsutils.USER_DATA_PATH / macro_file).exists():
3697
- logger.debug("copying default macro file.")
3698
3702
  try:
3699
3703
  copyfile(
3700
3704
  fsutils.APP_DATA_PATH / macro_file,
@@ -3702,57 +3706,50 @@ class MainWindow(QtWidgets.QMainWindow):
3702
3706
  )
3703
3707
  except IOError as err:
3704
3708
  logger.critical(f"Error {err} copying macro file.")
3709
+
3710
+ if not (fsutils.USER_DATA_PATH / self.contest.name / macro_file).exists():
3711
+ try:
3712
+ copyfile(
3713
+ fsutils.APP_DATA_PATH / macro_file,
3714
+ fsutils.USER_DATA_PATH / self.contest.name / macro_file,
3715
+ )
3716
+ except IOError as err:
3717
+ logger.critical(f"Error {err} copying macro file.")
3718
+
3719
+ return fsutils.USER_DATA_PATH / self.contest.name / macro_file
3720
+
3721
+ def edit_macros(self) -> None:
3722
+ """
3723
+ Calls the default text editor to edit the CW macro file.
3724
+
3725
+ Parameters
3726
+ ----------
3727
+ None
3728
+
3729
+ Returns
3730
+ -------
3731
+ None
3732
+ """
3733
+
3734
+ macro_file = self.get_macro_filename()
3735
+
3705
3736
  try:
3706
- fsutils.openFileWithOS(fsutils.USER_DATA_PATH / macro_file)
3737
+ fsutils.openFileWithOS(macro_file)
3707
3738
  except FileNotFoundError | PermissionError | OSError as err:
3708
- logger.critical(
3709
- f"Could not open file {fsutils.USER_DATA_PATH / macro_file} {err}"
3710
- )
3711
- self.read_cw_macros()
3739
+ logger.critical(f"Could not open file {macro_file} {err}")
3740
+ self.read_macros()
3712
3741
 
3713
- def read_cw_macros(self) -> None:
3742
+ def read_macros(self) -> None:
3714
3743
  """
3715
3744
  Reads in the CW macros, firsts it checks to see if the file exists. If it does not,
3716
3745
  and this has been packaged with pyinstaller it will copy the default file from the
3717
3746
  temp directory this is running from... In theory.
3718
3747
  """
3719
3748
 
3720
- if self.radio_state.get("mode") in (
3721
- "CW",
3722
- "CW-L",
3723
- "CW-R",
3724
- ):
3725
- macro_file = "cwmacros.txt"
3726
- elif self.radio_state.get("mode") in (
3727
- "RTTY",
3728
- "RTTY-R",
3729
- "LSB-D",
3730
- "USB-D",
3731
- "AM-D",
3732
- "FM-D",
3733
- "DIGI-U",
3734
- "DIGI-L",
3735
- "RTTYR",
3736
- "PKTLSB",
3737
- "PKTUSB",
3738
- ):
3739
- macro_file = "rttymacros.txt"
3740
- else:
3741
- macro_file = "ssbmacros.txt"
3749
+ macro_file = self.get_macro_filename()
3742
3750
 
3743
- if not (fsutils.USER_DATA_PATH / macro_file).exists():
3744
- logger.debug("copying default macro file.")
3745
- try:
3746
- copyfile(
3747
- fsutils.APP_DATA_PATH / macro_file,
3748
- fsutils.USER_DATA_PATH / macro_file,
3749
- )
3750
- except IOError as err:
3751
- logger.critical(f"Error {err} copying macro file.")
3752
3751
  try:
3753
- with open(
3754
- fsutils.USER_DATA_PATH / macro_file, "r", encoding="utf-8"
3755
- ) as file_descriptor:
3752
+ with open(macro_file, "r", encoding="utf-8") as file_descriptor:
3756
3753
  for line in file_descriptor:
3757
3754
  mode, fkey, buttonname, cwtext = line.split("|")
3758
3755
  if mode.strip().upper() == "R" and self.pref.get("run_state"):
not1mm/data/donors.html CHANGED
@@ -3,6 +3,7 @@
3
3
  <center>Donors</center>
4
4
  </h2>
5
5
  <hr />
6
+ <center>Adrian VA3NB</center>
6
7
  <center>Brian KB3ORR</center>
7
8
  <center>Connor KD9LSV</center>
8
9
 
@@ -9,7 +9,7 @@ rig.cwio_send n:i cwio transmit 1/0 (on/off)
9
9
  command lines to test the CW API via XMLRPC
10
10
 
11
11
  Setting WPM
12
- curl -d "<?xml version='1.0'?><methodCall><methodName>rig.cwio_set_wpm</methodName><params><param><value><i4>28</i4></value></param></params></methodCall>" http://localhost:12345
12
+ curl -d "<?xml version='1.0'?><methodCall><methodName>rig.cwio_set_wpm</methodName><params><param><value><i4>28</i4></value></param></params></methodCall>" http://localhost:12345
13
13
 
14
14
  Setting the text to send
15
15
  curl -d "<?xml version='1.0'?><methodCall><methodName>rig.cwio_text</methodName><params><param><value><string>test test test</string></value></param></params></methodCall>" http://localhost:12345
@@ -178,6 +178,21 @@ class CAT:
178
178
  self.__initialize_rigctrld()
179
179
  return False
180
180
 
181
+ def set_rigctl_cw_speed(self, speed):
182
+ """Set CW speed via rigctld"""
183
+ if self.rigctrlsocket:
184
+ try:
185
+ self.online = True
186
+ self.rigctrlsocket.send(bytes(f"L KEYSPD {speed}\n", "utf-8"))
187
+ _ = self.__get_serial_string()
188
+ return
189
+ except socket.error as exception:
190
+ self.online = False
191
+ logger.debug("set_level_rigctld: %s", f"{exception}")
192
+ self.rigctrlsocket = None
193
+ return
194
+ self.__initialize_rigctrld()
195
+
181
196
  def sendcwxmlrpc(self, texttosend):
182
197
  """Add text to flrig's cw send buffer."""
183
198
  logger.debug(f"{texttosend=}")
not1mm/lib/version.py CHANGED
@@ -1,3 +1,3 @@
1
1
  """It's the version"""
2
2
 
3
- __version__ = "24.11.19"
3
+ __version__ = "24.11.23"
@@ -126,3 +126,116 @@ def cabrillo(self, file_encoding):
126
126
 
127
127
  def recalculate_mults(self):
128
128
  """Recalculates multipliers after change in logged qso."""
129
+
130
+
131
+ def process_esm(self, new_focused_widget=None, with_enter=False):
132
+ """ESM State Machine"""
133
+
134
+ # self.pref["run_state"]
135
+
136
+ # -----===== Assigned F-Keys =====-----
137
+ # self.esm_dict["CQ"]
138
+ # self.esm_dict["EXCH"]
139
+ # self.esm_dict["QRZ"]
140
+ # self.esm_dict["AGN"]
141
+ # self.esm_dict["HISCALL"]
142
+ # self.esm_dict["MYCALL"]
143
+ # self.esm_dict["QSOB4"]
144
+
145
+ # ----==== text fields ====----
146
+ # self.callsign
147
+ # self.sent
148
+ # self.receive
149
+ # self.other_1
150
+ # self.other_2
151
+
152
+ if new_focused_widget is not None:
153
+ self.current_widget = self.inputs_dict.get(new_focused_widget)
154
+
155
+ # print(f"checking esm {self.current_widget=} {with_enter=} {self.pref.get("run_state")=}")
156
+
157
+ for a_button in [
158
+ self.F1,
159
+ self.F2,
160
+ self.F3,
161
+ self.F4,
162
+ self.F5,
163
+ self.F6,
164
+ self.F7,
165
+ self.F8,
166
+ self.F9,
167
+ self.F10,
168
+ self.F11,
169
+ self.F12,
170
+ ]:
171
+ self.restore_button_color(a_button)
172
+
173
+ buttons_to_send = []
174
+
175
+ if self.pref.get("run_state"):
176
+ if self.current_widget == "callsign":
177
+ if len(self.callsign.text()) < 3:
178
+ self.make_button_green(self.esm_dict["CQ"])
179
+ buttons_to_send.append(self.esm_dict["CQ"])
180
+ elif len(self.callsign.text()) > 2:
181
+ self.make_button_green(self.esm_dict["HISCALL"])
182
+ self.make_button_green(self.esm_dict["EXCH"])
183
+ buttons_to_send.append(self.esm_dict["HISCALL"])
184
+ buttons_to_send.append(self.esm_dict["EXCH"])
185
+
186
+ elif self.current_widget in ["other_1", "other_2"]:
187
+ if self.other_2.text() == "" and self.other_1.text() == "":
188
+ self.make_button_green(self.esm_dict["AGN"])
189
+ buttons_to_send.append(self.esm_dict["AGN"])
190
+ else:
191
+ self.make_button_green(self.esm_dict["QRZ"])
192
+ buttons_to_send.append(self.esm_dict["QRZ"])
193
+ buttons_to_send.append("LOGIT")
194
+
195
+ if with_enter is True and bool(len(buttons_to_send)):
196
+ for button in buttons_to_send:
197
+ if button:
198
+ if button == "LOGIT":
199
+ self.save_contact()
200
+ continue
201
+ self.process_function_key(button)
202
+ else:
203
+ if self.current_widget == "callsign":
204
+ if len(self.callsign.text()) > 2:
205
+ self.make_button_green(self.esm_dict["MYCALL"])
206
+ buttons_to_send.append(self.esm_dict["MYCALL"])
207
+
208
+ elif self.current_widget in ["other_1", "other_2"]:
209
+ if self.other_2.text() == "" and self.other_1.text() == "":
210
+ self.make_button_green(self.esm_dict["AGN"])
211
+ buttons_to_send.append(self.esm_dict["AGN"])
212
+ else:
213
+ self.make_button_green(self.esm_dict["EXCH"])
214
+ buttons_to_send.append(self.esm_dict["EXCH"])
215
+ buttons_to_send.append("LOGIT")
216
+ if with_enter is True and bool(len(buttons_to_send)):
217
+ for button in buttons_to_send:
218
+ if button:
219
+ if button == "LOGIT":
220
+ self.save_contact()
221
+ continue
222
+ self.process_function_key(button)
223
+
224
+
225
+ def populate_history_info_line(self):
226
+ result = self.database.fetch_call_history(self.callsign.text())
227
+ if result:
228
+ self.history_info.setText(
229
+ f"{result.get('Call', '')}, {result.get('Name', '')}, {result.get('UserText','...')}"
230
+ )
231
+ else:
232
+ self.history_info.setText("")
233
+
234
+
235
+ def check_call_history(self):
236
+ """"""
237
+ result = self.database.fetch_call_history(self.callsign.text())
238
+ if result:
239
+ self.history_info.setText(f"{result.get('UserText','')}")
240
+ if self.other_1.text() == "":
241
+ self.other_1.setText(f"{result.get('Name', '')}")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: not1mm
3
- Version: 24.11.19
3
+ Version: 24.11.23
4
4
  Summary: NOT1MM Logger
5
5
  Author-email: Michael Bridak <michael.bridak@gmail.com>
6
6
  Project-URL: Homepage, https://github.com/mbridak/not1mm
@@ -24,7 +24,7 @@ Requires-Dist: pyserial
24
24
  Requires-Dist: sounddevice
25
25
  Requires-Dist: soundfile
26
26
  Requires-Dist: numpy
27
- Requires-Dist: notctyparser >=23.6.21
27
+ Requires-Dist: notctyparser>=23.6.21
28
28
  Requires-Dist: rapidfuzz
29
29
  Requires-Dist: appdata
30
30
  Requires-Dist: Levenshtein
@@ -205,7 +205,7 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
205
205
 
206
206
  ## List of should be working contests, those in bold have ESM
207
207
 
208
- - General Logging (There are better general loggers like QLog, KLog, CQRLog)
208
+ - **General Logging** (There are better general loggers like QLog, KLog, CQRLog)
209
209
  - 10 10 Fall CW
210
210
  - 10 10 Spring CW
211
211
  - 10 10 Summer Phone
@@ -238,6 +238,8 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
238
238
 
239
239
  ## Recent Changes (Polishing the Turd)
240
240
 
241
+ - [24-11-23] Made macros per contest.
242
+ - [24-11-21] Merged PR from alduhoo setting CW Speed via rigctld, Added ESM and call history support for General Logging.
241
243
  - [24-11-19] Added ESM to Stew Perry, Phone Weekly, Medium Speed Test and JIDX.
242
244
  - [24-11-18] Accepted PR from dg9vh for the DARC XMAS Contest.
243
245
  - [24-11-17] Accepted PR from dg9vh for the LZ DX contest.
@@ -953,7 +955,6 @@ So if one were to go to `FILE -> LOAD CALL HISTORY FILE` and choose a downloaded
953
955
 
954
956
  Where the Name and State would auto-populate and the UserText info apprears in the bottom left.
955
957
 
956
-
957
958
  ## Contest specific notes
958
959
 
959
960
  I found it might be beneficial to have a section devoted to wierd quirky things
@@ -1,5 +1,5 @@
1
1
  not1mm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- not1mm/__main__.py,sha256=fgtaA-ZkoYL0I8tuA1X3iitHgUtiRXYYzT6_fbbjfPE,142248
2
+ not1mm/__main__.py,sha256=IKdrA6p-ScJtcuD9s0J4QsYNxqbobTJkIQs6nz4qw3o,142522
3
3
  not1mm/bandmap.py,sha256=X6mMHXS1kXBbUPZCaKgiVJ6Dz6DE6LEQqtEXfT3telg,30811
4
4
  not1mm/checkwindow.py,sha256=VFAcKYTcoWhmIf91chwY6tyao9FQMWPiUkgDDkkWaog,9670
5
5
  not1mm/fsutils.py,sha256=ukHKxKTeNKxKwqRaJjtzRShL4X5Xl0jRBbADyy3Ifp8,1701
@@ -20,7 +20,7 @@ not1mm/data/configuration.ui,sha256=iva5exfJJFBiiITpz6vgCB8e_j0lgsLeVWOltxtUk4g,
20
20
  not1mm/data/contests.sql,sha256=4hmJCDvrbxnA_Y5S4T5o52TZieeFk6QUwFerwlFePNA,89307
21
21
  not1mm/data/cty.json,sha256=dPG9K1Pm4Rxd4uJom_gQ8y-sbqiZfILpl4kBAFnOveU,4877142
22
22
  not1mm/data/cwmacros.txt,sha256=NztufsX6R52gAO7VyJ2AHr7wOh41pJTwHKh5Lcs32ds,468
23
- not1mm/data/donors.html,sha256=8hNzO3Q5a6p-_3egT1hfOjimPf810tKMUM5ukLzUsGM,116
23
+ not1mm/data/donors.html,sha256=XCh7XR5SyPzFx88UEaNLIGg41bMVcaNEO5L_c9Lrd2k,146
24
24
  not1mm/data/editcontact.ui,sha256=TNOsXETYfDaON4wj6AkzCJ-n2SmbNRO2-g2SLl5m8s0,27437
25
25
  not1mm/data/editmacro.ui,sha256=Vg-S62ogKYcWlDDlza_JYyZkCQfa8mCfF-cFqpBej-w,2700
26
26
  not1mm/data/greendot.png,sha256=6h6KFMj5mmu07ppPWXXewH0PLAvbOOre-5z6rpzWLLo,474
@@ -95,7 +95,7 @@ not1mm/data/phonetics/yourcall.wav,sha256=4kheHJmCiRDL2kjhlgXQ8_u_eEMgKxiNGu5UBk
95
95
  not1mm/data/phonetics/z.wav,sha256=arafCi7fwmBLdVDI-PRyaL4U-03PIQDhffwY5noJ_2c,51768
96
96
  not1mm/lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
97
97
  not1mm/lib/about.py,sha256=sWycfGcruN3SaEe4JmaJ61K6D8Itq0WxpUYT-lEcmYM,416
98
- not1mm/lib/cat_interface.py,sha256=ZSWXajCu38RI4d-VpGIUUjAMYSSMIPjaUrHkejJKmts,23908
98
+ not1mm/lib/cat_interface.py,sha256=-RGssRLL8_iuf6hPAsQZ9itoDISTx0XT-nD3jJ4LKss,24475
99
99
  not1mm/lib/cwinterface.py,sha256=yQL8Dif9oOIynaRItHgvcmu4mYv1TnTpqCHPtkeb09o,4472
100
100
  not1mm/lib/database.py,sha256=nqWp2eJ7JfUTqaQ9AVbx3XjgtlRnYY9ruTQCv2YRreY,48310
101
101
  not1mm/lib/edit_contact.py,sha256=Ki9bGPpqyQQBB1cU8VIBDCal3lbXeQ6qxhzklmhE2_w,353
@@ -114,7 +114,7 @@ not1mm/lib/plugin_common.py,sha256=AABdx9DoTT8Znrup7AkfmKGC22hshMsEypiMqV0iKw0,1
114
114
  not1mm/lib/select_contest.py,sha256=WsptLuwkouIHeocJL3oZ6-eUfEnhpwdc-x7eMZ_TIVM,359
115
115
  not1mm/lib/settings.py,sha256=Xt0WE2ro_kUYdugQ0Pe1SQX07MHrJ0jyQqDqAKKqxuU,13564
116
116
  not1mm/lib/super_check_partial.py,sha256=hwT2NRwobu0PLDyw6ltmbmcAtGBD02CKGFbgGWjXMqA,2334
117
- not1mm/lib/version.py,sha256=TjfjB8wIB5oYQmLzecQzZe-pvYa2dd0cPEpXKiYh3AE,49
117
+ not1mm/lib/version.py,sha256=i-XV0bR64KuRtURdg5UiGO_HwzJh30A1goTNLNf275w,49
118
118
  not1mm/lib/versiontest.py,sha256=8vDNptuBBunn-1IGkjNaquehqBYUJyjrPSF8Igmd4_Y,1286
119
119
  not1mm/plugins/10_10_fall_cw.py,sha256=r2YkRNiMS_3hXrf3zeiijzW24roilyIXnwXwTd07X8M,11208
120
120
  not1mm/plugins/10_10_spring_cw.py,sha256=EBBcVgxDhtAK7cGHq9LOU6LhY9vSqlk7GEkApn3KRYM,11213
@@ -142,7 +142,7 @@ not1mm/plugins/cq_ww_rtty.py,sha256=Pfpr8xWJwp2NOci-WQMTUZaMpAtsUGq1jrIIUv6lQ2Y,
142
142
  not1mm/plugins/cq_ww_ssb.py,sha256=2zhIbqthXLekQhK22icOScegm6kYZLbmpPMZYEmIM5I,17001
143
143
  not1mm/plugins/cwt.py,sha256=3gA1DqiXxj5NARdG5i0PyFmuq3XSXn6LisZxD5jFs4M,17034
144
144
  not1mm/plugins/darc_xmas.py,sha256=GdtAQVCLogKGzZaexJfzsZms5SbLLlO1YweFPjgvYWw,18458
145
- not1mm/plugins/general_logging.py,sha256=2-9We3wo6mbaNqE4GujgvpCsiaVYcNYloqDYO8MKQAc,2787
145
+ not1mm/plugins/general_logging.py,sha256=NV_FCgpAEEQrVRxMDD7nQ2krJgPrhtopizxrGndtUNk,6686
146
146
  not1mm/plugins/helvetia.py,sha256=SRKn7jflfYPUNrvmErDM44af5YWUe57h7JkIwFSbT0Q,19609
147
147
  not1mm/plugins/iaru_fieldday_r1_cw.py,sha256=b-WA-KcixXNTozO5lfqujeCBXFRuM_Ubm_9MIwlrhIs,13555
148
148
  not1mm/plugins/iaru_fieldday_r1_ssb.py,sha256=gQH2XQuE-ywaGq2sde-sPP1_C6_Y81v3FPDiE2BJixA,13560
@@ -162,9 +162,9 @@ not1mm/plugins/ref_ssb.py,sha256=G2Gz4kApchmOZQVnBexEokSEvdb-mZWJAfyJ1D6JDGY,204
162
162
  not1mm/plugins/stew_perry_topband.py,sha256=Gy_vv6tgkR-3vmvsUVO0pVfHMkUJSxpt7G4secn0RH8,15084
163
163
  not1mm/plugins/weekly_rtty.py,sha256=PI0_AtEdZZKGAuKnP-b2EYn9xwCN1Ablk38trbNP3Rc,19603
164
164
  not1mm/plugins/winter_field_day.py,sha256=9w3tDL9ZWiENSTERc3vzDbBktvI7pnyNvlH6fDjAi08,14841
165
- not1mm-24.11.19.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
166
- not1mm-24.11.19.dist-info/METADATA,sha256=xHUlQiTW-vHdEhL_ucf88gQGfnM6VTia96FOyq4u91c,36490
167
- not1mm-24.11.19.dist-info/WHEEL,sha256=R06PA3UVYHThwHvxuRWMqaGcr-PuniXahwjmQRFMEkY,91
168
- not1mm-24.11.19.dist-info/entry_points.txt,sha256=pMcZk_0dxFgLkcUkF0Q874ojpwOmF3OL6EKw9LgvocM,47
169
- not1mm-24.11.19.dist-info/top_level.txt,sha256=0YmTxEcDzQlzXub-lXASvoLpg_mt1c2thb5cVkDf5J4,7
170
- not1mm-24.11.19.dist-info/RECORD,,
165
+ not1mm-24.11.23.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
166
+ not1mm-24.11.23.dist-info/METADATA,sha256=7la-wqRZm6lciPrTOHi8B_ly4eoiBqCUowixz38RbSU,36652
167
+ not1mm-24.11.23.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
168
+ not1mm-24.11.23.dist-info/entry_points.txt,sha256=pMcZk_0dxFgLkcUkF0Q874ojpwOmF3OL6EKw9LgvocM,47
169
+ not1mm-24.11.23.dist-info/top_level.txt,sha256=0YmTxEcDzQlzXub-lXASvoLpg_mt1c2thb5cVkDf5J4,7
170
+ not1mm-24.11.23.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.5.0)
2
+ Generator: setuptools (75.6.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5