not1mm 24.10.24.1__py3-none-any.whl → 24.10.26__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 +9 -3
- not1mm/bandmap.py +6 -1
- not1mm/data/main.ui +23 -3
- not1mm/lib/version.py +1 -1
- not1mm/plugins/10_10_fall_cw.py +109 -82
- not1mm/plugins/10_10_spring_cw.py +109 -82
- not1mm/plugins/10_10_summer_phone.py +109 -82
- not1mm/plugins/10_10_winter_phone.py +109 -82
- not1mm/plugins/arrl_10m.py +109 -82
- not1mm/plugins/arrl_dx_cw.py +109 -82
- not1mm/plugins/arrl_dx_ssb.py +109 -82
- not1mm/plugins/arrl_field_day.py +109 -82
- not1mm/plugins/arrl_ss_cw.py +109 -82
- not1mm/plugins/arrl_ss_phone.py +109 -82
- not1mm/plugins/arrl_vhf_jan.py +109 -82
- not1mm/plugins/arrl_vhf_jun.py +109 -82
- not1mm/plugins/arrl_vhf_sep.py +109 -82
- not1mm/plugins/canada_day.py +109 -82
- not1mm/plugins/cq_160_cw.py +109 -74
- not1mm/plugins/cq_160_ssb.py +109 -74
- not1mm/plugins/cq_wpx_cw.py +109 -82
- not1mm/plugins/cq_wpx_rtty.py +109 -82
- not1mm/plugins/cq_wpx_ssb.py +109 -82
- not1mm/plugins/cq_ww_cw.py +115 -83
- not1mm/plugins/cq_ww_rtty.py +110 -73
- not1mm/plugins/cq_ww_ssb.py +109 -82
- not1mm/plugins/cwt.py +109 -82
- not1mm/plugins/general_logging.py +1 -1
- not1mm/plugins/helvetia.py +109 -82
- not1mm/plugins/iaru_fieldday_r1_cw.py +109 -82
- not1mm/plugins/iaru_fieldday_r1_ssb.py +109 -82
- not1mm/plugins/iaru_hf.py +109 -82
- not1mm/plugins/icwc_mst.py +109 -82
- not1mm/plugins/jidx_cw.py +74 -48
- not1mm/plugins/jidx_ph.py +74 -48
- not1mm/plugins/k1usn_sst.py +109 -82
- not1mm/plugins/naqp_cw.py +109 -82
- not1mm/plugins/naqp_rtty.py +109 -82
- not1mm/plugins/naqp_ssb.py +109 -82
- not1mm/plugins/phone_weekly_test.py +109 -82
- not1mm/plugins/ref_cw.py +109 -82
- not1mm/plugins/ref_ssb.py +109 -82
- not1mm/plugins/stew_perry_topband.py +109 -82
- not1mm/plugins/weekly_rtty.py +109 -82
- not1mm/plugins/winter_field_day.py +109 -82
- {not1mm-24.10.24.1.dist-info → not1mm-24.10.26.dist-info}/METADATA +3 -1
- {not1mm-24.10.24.1.dist-info → not1mm-24.10.26.dist-info}/RECORD +51 -51
- {not1mm-24.10.24.1.dist-info → not1mm-24.10.26.dist-info}/LICENSE +0 -0
- {not1mm-24.10.24.1.dist-info → not1mm-24.10.26.dist-info}/WHEEL +0 -0
- {not1mm-24.10.24.1.dist-info → not1mm-24.10.26.dist-info}/entry_points.txt +0 -0
- {not1mm-24.10.24.1.dist-info → not1mm-24.10.26.dist-info}/top_level.txt +0 -0
not1mm/plugins/naqp_cw.py
CHANGED
@@ -194,7 +194,16 @@ def adif(self):
|
|
194
194
|
gen_adif(self, cabrillo_name, "NAQP-CW")
|
195
195
|
|
196
196
|
|
197
|
-
def
|
197
|
+
def output_cabrillo_line(line_to_output, ending, file_descriptor, file_encoding):
|
198
|
+
""""""
|
199
|
+
print(
|
200
|
+
line_to_output.encode(file_encoding, errors="ignore").decode(),
|
201
|
+
end=ending,
|
202
|
+
file=file_descriptor,
|
203
|
+
)
|
204
|
+
|
205
|
+
|
206
|
+
def cabrillo(self, file_encoding):
|
198
207
|
"""Generates Cabrillo file. Maybe."""
|
199
208
|
# https://www.cqwpx.com/cabrillo.htm
|
200
209
|
logger.debug("******Cabrillo*****")
|
@@ -211,133 +220,150 @@ def cabrillo(self):
|
|
211
220
|
log = self.database.fetch_all_contacts_asc()
|
212
221
|
try:
|
213
222
|
with open(filename, "w", encoding="utf-8") as file_descriptor:
|
214
|
-
|
215
|
-
|
223
|
+
output_cabrillo_line(
|
224
|
+
"START-OF-LOG: 3.0",
|
225
|
+
"\r\n",
|
226
|
+
file_descriptor,
|
227
|
+
file_encoding,
|
228
|
+
)
|
229
|
+
output_cabrillo_line(
|
216
230
|
f"CREATED-BY: Not1MM v{__version__}",
|
217
|
-
|
218
|
-
|
231
|
+
"\r\n",
|
232
|
+
file_descriptor,
|
233
|
+
file_encoding,
|
219
234
|
)
|
220
|
-
|
235
|
+
output_cabrillo_line(
|
221
236
|
f"CONTEST: {cabrillo_name}",
|
222
|
-
|
223
|
-
|
237
|
+
"\r\n",
|
238
|
+
file_descriptor,
|
239
|
+
file_encoding,
|
224
240
|
)
|
225
241
|
if self.station.get("Club", ""):
|
226
|
-
|
242
|
+
output_cabrillo_line(
|
227
243
|
f"CLUB: {self.station.get('Club', '').upper()}",
|
228
|
-
|
229
|
-
|
244
|
+
"\r\n",
|
245
|
+
file_descriptor,
|
246
|
+
file_encoding,
|
230
247
|
)
|
231
|
-
|
248
|
+
output_cabrillo_line(
|
232
249
|
f"CALLSIGN: {self.station.get('Call','')}",
|
233
|
-
|
234
|
-
|
250
|
+
"\r\n",
|
251
|
+
file_descriptor,
|
252
|
+
file_encoding,
|
235
253
|
)
|
236
|
-
|
254
|
+
output_cabrillo_line(
|
237
255
|
f"LOCATION: {self.station.get('ARRLSection', '')}",
|
238
|
-
|
239
|
-
|
256
|
+
"\r\n",
|
257
|
+
file_descriptor,
|
258
|
+
file_encoding,
|
240
259
|
)
|
241
|
-
|
242
|
-
# f"ARRL-SECTION: {self.pref.get('section', '')}",
|
243
|
-
# end="\r\n",
|
244
|
-
# file=file_descriptor,
|
245
|
-
# )
|
246
|
-
print(
|
260
|
+
output_cabrillo_line(
|
247
261
|
f"CATEGORY-OPERATOR: {self.contest_settings.get('OperatorCategory','')}",
|
248
|
-
|
249
|
-
|
262
|
+
"\r\n",
|
263
|
+
file_descriptor,
|
264
|
+
file_encoding,
|
250
265
|
)
|
251
|
-
|
266
|
+
output_cabrillo_line(
|
252
267
|
f"CATEGORY-ASSISTED: {self.contest_settings.get('AssistedCategory','')}",
|
253
|
-
|
254
|
-
|
268
|
+
"\r\n",
|
269
|
+
file_descriptor,
|
270
|
+
file_encoding,
|
255
271
|
)
|
256
|
-
|
272
|
+
output_cabrillo_line(
|
257
273
|
f"CATEGORY-BAND: {self.contest_settings.get('BandCategory','')}",
|
258
|
-
|
259
|
-
|
274
|
+
"\r\n",
|
275
|
+
file_descriptor,
|
276
|
+
file_encoding,
|
260
277
|
)
|
261
|
-
|
278
|
+
output_cabrillo_line(
|
262
279
|
f"CATEGORY-MODE: {self.contest_settings.get('ModeCategory','')}",
|
263
|
-
|
264
|
-
|
280
|
+
"\r\n",
|
281
|
+
file_descriptor,
|
282
|
+
file_encoding,
|
265
283
|
)
|
266
|
-
|
284
|
+
output_cabrillo_line(
|
267
285
|
f"CATEGORY-TRANSMITTER: {self.contest_settings.get('TransmitterCategory','')}",
|
268
|
-
|
269
|
-
|
286
|
+
"\r\n",
|
287
|
+
file_descriptor,
|
288
|
+
file_encoding,
|
270
289
|
)
|
271
290
|
if self.contest_settings.get("OverlayCategory", "") != "N/A":
|
272
|
-
|
291
|
+
output_cabrillo_line(
|
273
292
|
f"CATEGORY-OVERLAY: {self.contest_settings.get('OverlayCategory','')}",
|
274
|
-
|
275
|
-
|
293
|
+
"\r\n",
|
294
|
+
file_descriptor,
|
295
|
+
file_encoding,
|
276
296
|
)
|
277
|
-
|
297
|
+
output_cabrillo_line(
|
278
298
|
f"GRID-LOCATOR: {self.station.get('GridSquare','')}",
|
279
|
-
|
280
|
-
|
299
|
+
"\r\n",
|
300
|
+
file_descriptor,
|
301
|
+
file_encoding,
|
281
302
|
)
|
282
|
-
|
283
|
-
# f"CATEGORY: {None}",
|
284
|
-
# end="\r\n",
|
285
|
-
# file=file_descriptor,
|
286
|
-
# )
|
287
|
-
print(
|
303
|
+
output_cabrillo_line(
|
288
304
|
f"CATEGORY-POWER: {self.contest_settings.get('PowerCategory','')}",
|
289
|
-
|
290
|
-
|
305
|
+
"\r\n",
|
306
|
+
file_descriptor,
|
307
|
+
file_encoding,
|
291
308
|
)
|
292
309
|
|
293
|
-
|
310
|
+
output_cabrillo_line(
|
294
311
|
f"CLAIMED-SCORE: {calc_score(self)}",
|
295
|
-
|
296
|
-
|
312
|
+
"\r\n",
|
313
|
+
file_descriptor,
|
314
|
+
file_encoding,
|
297
315
|
)
|
298
316
|
ops = f"@{self.station.get('Call','')}"
|
299
317
|
list_of_ops = self.database.get_ops()
|
300
318
|
for op in list_of_ops:
|
301
319
|
ops += f", {op.get('Operator', '')}"
|
302
|
-
|
320
|
+
output_cabrillo_line(
|
303
321
|
f"OPERATORS: {ops}",
|
304
|
-
|
305
|
-
|
322
|
+
"\r\n",
|
323
|
+
file_descriptor,
|
324
|
+
file_encoding,
|
306
325
|
)
|
307
|
-
|
326
|
+
output_cabrillo_line(
|
308
327
|
f"NAME: {self.station.get('Name', '')}",
|
309
|
-
|
310
|
-
|
328
|
+
"\r\n",
|
329
|
+
file_descriptor,
|
330
|
+
file_encoding,
|
311
331
|
)
|
312
|
-
|
332
|
+
output_cabrillo_line(
|
313
333
|
f"ADDRESS: {self.station.get('Street1', '')}",
|
314
|
-
|
315
|
-
|
334
|
+
"\r\n",
|
335
|
+
file_descriptor,
|
336
|
+
file_encoding,
|
316
337
|
)
|
317
|
-
|
338
|
+
output_cabrillo_line(
|
318
339
|
f"ADDRESS-CITY: {self.station.get('City', '')}",
|
319
|
-
|
320
|
-
|
340
|
+
"\r\n",
|
341
|
+
file_descriptor,
|
342
|
+
file_encoding,
|
321
343
|
)
|
322
|
-
|
344
|
+
output_cabrillo_line(
|
323
345
|
f"ADDRESS-STATE-PROVINCE: {self.station.get('State', '')}",
|
324
|
-
|
325
|
-
|
346
|
+
"\r\n",
|
347
|
+
file_descriptor,
|
348
|
+
file_encoding,
|
326
349
|
)
|
327
|
-
|
350
|
+
output_cabrillo_line(
|
328
351
|
f"ADDRESS-POSTALCODE: {self.station.get('Zip', '')}",
|
329
|
-
|
330
|
-
|
352
|
+
"\r\n",
|
353
|
+
file_descriptor,
|
354
|
+
file_encoding,
|
331
355
|
)
|
332
|
-
|
356
|
+
output_cabrillo_line(
|
333
357
|
f"ADDRESS-COUNTRY: {self.station.get('Country', '')}",
|
334
|
-
|
335
|
-
|
358
|
+
"\r\n",
|
359
|
+
file_descriptor,
|
360
|
+
file_encoding,
|
336
361
|
)
|
337
|
-
|
362
|
+
output_cabrillo_line(
|
338
363
|
f"EMAIL: {self.station.get('Email', '')}",
|
339
|
-
|
340
|
-
|
364
|
+
"\r\n",
|
365
|
+
file_descriptor,
|
366
|
+
file_encoding,
|
341
367
|
)
|
342
368
|
for contact in log:
|
343
369
|
the_date_and_time = contact.get("TS", "")
|
@@ -348,17 +374,18 @@ def cabrillo(self):
|
|
348
374
|
|
349
375
|
loggeddate = the_date_and_time[:10]
|
350
376
|
loggedtime = the_date_and_time[11:13] + the_date_and_time[14:16]
|
351
|
-
|
377
|
+
output_cabrillo_line(
|
352
378
|
f"QSO: {frequency} {themode} {loggeddate} {loggedtime} "
|
353
379
|
f"{contact.get('StationPrefix', '').ljust(13)} "
|
354
380
|
f"{str(contact.get('SentNr', '')).upper()} "
|
355
381
|
f"{contact.get('Call', '').ljust(13)} "
|
356
382
|
f"{str(contact.get('Name', '')).ljust(11)} "
|
357
383
|
f"{str(contact.get('Sect', '')).ljust(5)}",
|
358
|
-
|
359
|
-
|
384
|
+
"\r\n",
|
385
|
+
file_descriptor,
|
386
|
+
file_encoding,
|
360
387
|
)
|
361
|
-
|
388
|
+
output_cabrillo_line("END-OF-LOG:", "\r\n", file_descriptor, file_encoding)
|
362
389
|
self.show_message_box(f"Cabrillo saved to: {filename}")
|
363
390
|
except IOError as exception:
|
364
391
|
logger.critical("cabrillo: IO error: %s, writing to %s", exception, filename)
|
not1mm/plugins/naqp_rtty.py
CHANGED
@@ -197,7 +197,16 @@ def adif(self):
|
|
197
197
|
gen_adif(self, cabrillo_name, "NAQP-RTTY")
|
198
198
|
|
199
199
|
|
200
|
-
def
|
200
|
+
def output_cabrillo_line(line_to_output, ending, file_descriptor, file_encoding):
|
201
|
+
""""""
|
202
|
+
print(
|
203
|
+
line_to_output.encode(file_encoding, errors="ignore").decode(),
|
204
|
+
end=ending,
|
205
|
+
file=file_descriptor,
|
206
|
+
)
|
207
|
+
|
208
|
+
|
209
|
+
def cabrillo(self, file_encoding):
|
201
210
|
"""Generates Cabrillo file. Maybe."""
|
202
211
|
# https://www.cqwpx.com/cabrillo.htm
|
203
212
|
logger.debug("******Cabrillo*****")
|
@@ -214,133 +223,150 @@ def cabrillo(self):
|
|
214
223
|
log = self.database.fetch_all_contacts_asc()
|
215
224
|
try:
|
216
225
|
with open(filename, "w", encoding="utf-8") as file_descriptor:
|
217
|
-
|
218
|
-
|
226
|
+
output_cabrillo_line(
|
227
|
+
"START-OF-LOG: 3.0",
|
228
|
+
"\r\n",
|
229
|
+
file_descriptor,
|
230
|
+
file_encoding,
|
231
|
+
)
|
232
|
+
output_cabrillo_line(
|
219
233
|
f"CREATED-BY: Not1MM v{__version__}",
|
220
|
-
|
221
|
-
|
234
|
+
"\r\n",
|
235
|
+
file_descriptor,
|
236
|
+
file_encoding,
|
222
237
|
)
|
223
|
-
|
238
|
+
output_cabrillo_line(
|
224
239
|
f"CONTEST: {cabrillo_name}",
|
225
|
-
|
226
|
-
|
240
|
+
"\r\n",
|
241
|
+
file_descriptor,
|
242
|
+
file_encoding,
|
227
243
|
)
|
228
244
|
if self.station.get("Club", ""):
|
229
|
-
|
245
|
+
output_cabrillo_line(
|
230
246
|
f"CLUB: {self.station.get('Club', '').upper()}",
|
231
|
-
|
232
|
-
|
247
|
+
"\r\n",
|
248
|
+
file_descriptor,
|
249
|
+
file_encoding,
|
233
250
|
)
|
234
|
-
|
251
|
+
output_cabrillo_line(
|
235
252
|
f"CALLSIGN: {self.station.get('Call','')}",
|
236
|
-
|
237
|
-
|
253
|
+
"\r\n",
|
254
|
+
file_descriptor,
|
255
|
+
file_encoding,
|
238
256
|
)
|
239
|
-
|
257
|
+
output_cabrillo_line(
|
240
258
|
f"LOCATION: {self.station.get('ARRLSection', '')}",
|
241
|
-
|
242
|
-
|
259
|
+
"\r\n",
|
260
|
+
file_descriptor,
|
261
|
+
file_encoding,
|
243
262
|
)
|
244
|
-
|
245
|
-
# f"ARRL-SECTION: {self.pref.get('section', '')}",
|
246
|
-
# end="\r\n",
|
247
|
-
# file=file_descriptor,
|
248
|
-
# )
|
249
|
-
print(
|
263
|
+
output_cabrillo_line(
|
250
264
|
f"CATEGORY-OPERATOR: {self.contest_settings.get('OperatorCategory','')}",
|
251
|
-
|
252
|
-
|
265
|
+
"\r\n",
|
266
|
+
file_descriptor,
|
267
|
+
file_encoding,
|
253
268
|
)
|
254
|
-
|
269
|
+
output_cabrillo_line(
|
255
270
|
f"CATEGORY-ASSISTED: {self.contest_settings.get('AssistedCategory','')}",
|
256
|
-
|
257
|
-
|
271
|
+
"\r\n",
|
272
|
+
file_descriptor,
|
273
|
+
file_encoding,
|
258
274
|
)
|
259
|
-
|
275
|
+
output_cabrillo_line(
|
260
276
|
f"CATEGORY-BAND: {self.contest_settings.get('BandCategory','')}",
|
261
|
-
|
262
|
-
|
277
|
+
"\r\n",
|
278
|
+
file_descriptor,
|
279
|
+
file_encoding,
|
263
280
|
)
|
264
|
-
|
281
|
+
output_cabrillo_line(
|
265
282
|
f"CATEGORY-MODE: {self.contest_settings.get('ModeCategory','')}",
|
266
|
-
|
267
|
-
|
283
|
+
"\r\n",
|
284
|
+
file_descriptor,
|
285
|
+
file_encoding,
|
268
286
|
)
|
269
|
-
|
287
|
+
output_cabrillo_line(
|
270
288
|
f"CATEGORY-TRANSMITTER: {self.contest_settings.get('TransmitterCategory','')}",
|
271
|
-
|
272
|
-
|
289
|
+
"\r\n",
|
290
|
+
file_descriptor,
|
291
|
+
file_encoding,
|
273
292
|
)
|
274
293
|
if self.contest_settings.get("OverlayCategory", "") != "N/A":
|
275
|
-
|
294
|
+
output_cabrillo_line(
|
276
295
|
f"CATEGORY-OVERLAY: {self.contest_settings.get('OverlayCategory','')}",
|
277
|
-
|
278
|
-
|
296
|
+
"\r\n",
|
297
|
+
file_descriptor,
|
298
|
+
file_encoding,
|
279
299
|
)
|
280
|
-
|
300
|
+
output_cabrillo_line(
|
281
301
|
f"GRID-LOCATOR: {self.station.get('GridSquare','')}",
|
282
|
-
|
283
|
-
|
302
|
+
"\r\n",
|
303
|
+
file_descriptor,
|
304
|
+
file_encoding,
|
284
305
|
)
|
285
|
-
|
286
|
-
# f"CATEGORY: {None}",
|
287
|
-
# end="\r\n",
|
288
|
-
# file=file_descriptor,
|
289
|
-
# )
|
290
|
-
print(
|
306
|
+
output_cabrillo_line(
|
291
307
|
f"CATEGORY-POWER: {self.contest_settings.get('PowerCategory','')}",
|
292
|
-
|
293
|
-
|
308
|
+
"\r\n",
|
309
|
+
file_descriptor,
|
310
|
+
file_encoding,
|
294
311
|
)
|
295
312
|
|
296
|
-
|
313
|
+
output_cabrillo_line(
|
297
314
|
f"CLAIMED-SCORE: {calc_score(self)}",
|
298
|
-
|
299
|
-
|
315
|
+
"\r\n",
|
316
|
+
file_descriptor,
|
317
|
+
file_encoding,
|
300
318
|
)
|
301
319
|
ops = f"@{self.station.get('Call','')}"
|
302
320
|
list_of_ops = self.database.get_ops()
|
303
321
|
for op in list_of_ops:
|
304
322
|
ops += f", {op.get('Operator', '')}"
|
305
|
-
|
323
|
+
output_cabrillo_line(
|
306
324
|
f"OPERATORS: {ops}",
|
307
|
-
|
308
|
-
|
325
|
+
"\r\n",
|
326
|
+
file_descriptor,
|
327
|
+
file_encoding,
|
309
328
|
)
|
310
|
-
|
329
|
+
output_cabrillo_line(
|
311
330
|
f"NAME: {self.station.get('Name', '')}",
|
312
|
-
|
313
|
-
|
331
|
+
"\r\n",
|
332
|
+
file_descriptor,
|
333
|
+
file_encoding,
|
314
334
|
)
|
315
|
-
|
335
|
+
output_cabrillo_line(
|
316
336
|
f"ADDRESS: {self.station.get('Street1', '')}",
|
317
|
-
|
318
|
-
|
337
|
+
"\r\n",
|
338
|
+
file_descriptor,
|
339
|
+
file_encoding,
|
319
340
|
)
|
320
|
-
|
341
|
+
output_cabrillo_line(
|
321
342
|
f"ADDRESS-CITY: {self.station.get('City', '')}",
|
322
|
-
|
323
|
-
|
343
|
+
"\r\n",
|
344
|
+
file_descriptor,
|
345
|
+
file_encoding,
|
324
346
|
)
|
325
|
-
|
347
|
+
output_cabrillo_line(
|
326
348
|
f"ADDRESS-STATE-PROVINCE: {self.station.get('State', '')}",
|
327
|
-
|
328
|
-
|
349
|
+
"\r\n",
|
350
|
+
file_descriptor,
|
351
|
+
file_encoding,
|
329
352
|
)
|
330
|
-
|
353
|
+
output_cabrillo_line(
|
331
354
|
f"ADDRESS-POSTALCODE: {self.station.get('Zip', '')}",
|
332
|
-
|
333
|
-
|
355
|
+
"\r\n",
|
356
|
+
file_descriptor,
|
357
|
+
file_encoding,
|
334
358
|
)
|
335
|
-
|
359
|
+
output_cabrillo_line(
|
336
360
|
f"ADDRESS-COUNTRY: {self.station.get('Country', '')}",
|
337
|
-
|
338
|
-
|
361
|
+
"\r\n",
|
362
|
+
file_descriptor,
|
363
|
+
file_encoding,
|
339
364
|
)
|
340
|
-
|
365
|
+
output_cabrillo_line(
|
341
366
|
f"EMAIL: {self.station.get('Email', '')}",
|
342
|
-
|
343
|
-
|
367
|
+
"\r\n",
|
368
|
+
file_descriptor,
|
369
|
+
file_encoding,
|
344
370
|
)
|
345
371
|
for contact in log:
|
346
372
|
the_date_and_time = contact.get("TS", "")
|
@@ -367,17 +393,18 @@ def cabrillo(self):
|
|
367
393
|
|
368
394
|
loggeddate = the_date_and_time[:10]
|
369
395
|
loggedtime = the_date_and_time[11:13] + the_date_and_time[14:16]
|
370
|
-
|
396
|
+
output_cabrillo_line(
|
371
397
|
f"QSO: {frequency} {themode} {loggeddate} {loggedtime} "
|
372
398
|
f"{contact.get('StationPrefix', '').ljust(13)} "
|
373
399
|
f"{str(contact.get('SentNr', '')).upper()} "
|
374
400
|
f"{contact.get('Call', '').ljust(13)} "
|
375
401
|
f"{str(contact.get('Name', '')).ljust(11)} "
|
376
402
|
f"{str(contact.get('Sect', '')).ljust(5)}",
|
377
|
-
|
378
|
-
|
403
|
+
"\r\n",
|
404
|
+
file_descriptor,
|
405
|
+
file_encoding,
|
379
406
|
)
|
380
|
-
|
407
|
+
output_cabrillo_line("END-OF-LOG:", "\r\n", file_descriptor, file_encoding)
|
381
408
|
self.show_message_box(f"Cabrillo saved to: {filename}")
|
382
409
|
except IOError as exception:
|
383
410
|
logger.critical("cabrillo: IO error: %s, writing to %s", exception, filename)
|