not1mm 24.11.10__py3-none-any.whl → 24.11.15__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 +15 -5
- not1mm/checkwindow.py +1 -1
- not1mm/data/checkwindow.ui +18 -0
- not1mm/lib/cat_interface.py +36 -2
- not1mm/lib/cwinterface.py +28 -3
- not1mm/lib/version.py +1 -1
- not1mm/test.py +8 -0
- {not1mm-24.11.10.dist-info → not1mm-24.11.15.dist-info}/METADATA +48 -3
- {not1mm-24.11.10.dist-info → not1mm-24.11.15.dist-info}/RECORD +13 -12
- {not1mm-24.11.10.dist-info → not1mm-24.11.15.dist-info}/WHEEL +1 -1
- {not1mm-24.11.10.dist-info → not1mm-24.11.15.dist-info}/LICENSE +0 -0
- {not1mm-24.11.10.dist-info → not1mm-24.11.15.dist-info}/entry_points.txt +0 -0
- {not1mm-24.11.10.dist-info → not1mm-24.11.15.dist-info}/top_level.txt +0 -0
not1mm/__main__.py
CHANGED
@@ -608,11 +608,8 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
608
608
|
if len(x) == 1:
|
609
609
|
if int(x[0]) > 6:
|
610
610
|
old_Qt = False
|
611
|
-
elif len(x)
|
612
|
-
if int(x[0]) >= 6 and int(x[1])
|
613
|
-
old_Qt = False
|
614
|
-
elif len(x) == 3:
|
615
|
-
if int(x[0]) >= 6 and int(x[1]) >= 7 and int(x[2]) >= 2:
|
611
|
+
elif len(x) >= 2:
|
612
|
+
if int(x[0]) >= 6 and int(x[1]) >= 8:
|
616
613
|
old_Qt = False
|
617
614
|
|
618
615
|
# Featureset for wayland if pyqt is older that 6.7.1
|
@@ -2024,8 +2021,19 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
2024
2021
|
Returns:
|
2025
2022
|
-------
|
2026
2023
|
None
|
2024
|
+
|
2025
|
+
Control
|
2026
|
+
QWRTYIOPSFGHJLBNM,./;'[]//-
|
2027
|
+
|
2028
|
+
|
2029
|
+
shift control
|
2030
|
+
ABCDEFGHIJKLMNOPQRSTUVWXY
|
2027
2031
|
"""
|
2028
2032
|
modifier = event.modifiers()
|
2033
|
+
# the_key = event.key()
|
2034
|
+
|
2035
|
+
# print(f"Modifier is {modifier=} Key is {the_key=}")
|
2036
|
+
|
2029
2037
|
if (
|
2030
2038
|
event.key() == Qt.Key.Key_Equal
|
2031
2039
|
and modifier == Qt.KeyboardModifier.ControlModifier
|
@@ -3019,6 +3027,8 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
3019
3027
|
self.use_call_history = self.pref.get("use_call_history", False)
|
3020
3028
|
if self.use_call_history:
|
3021
3029
|
self.history_info.show()
|
3030
|
+
else:
|
3031
|
+
self.history_info.hide()
|
3022
3032
|
self.use_esm = self.pref.get("use_esm", False)
|
3023
3033
|
self.esm_dict["CQ"] = fkey_dict.get(self.pref.get("esm_cq", "DISABLED"))
|
3024
3034
|
self.esm_dict["EXCH"] = fkey_dict.get(self.pref.get("esm_exch", "DISABLED"))
|
not1mm/checkwindow.py
CHANGED
not1mm/data/checkwindow.ui
CHANGED
@@ -31,6 +31,12 @@
|
|
31
31
|
<property name="focusPolicy">
|
32
32
|
<enum>Qt::ClickFocus</enum>
|
33
33
|
</property>
|
34
|
+
<property name="font">
|
35
|
+
<font>
|
36
|
+
<family>JetBrains Mono ExtraLight</family>
|
37
|
+
<pointsize>12</pointsize>
|
38
|
+
</font>
|
39
|
+
</property>
|
34
40
|
<property name="sizeAdjustPolicy">
|
35
41
|
<enum>QAbstractScrollArea::AdjustToContents</enum>
|
36
42
|
</property>
|
@@ -62,6 +68,12 @@
|
|
62
68
|
<property name="focusPolicy">
|
63
69
|
<enum>Qt::ClickFocus</enum>
|
64
70
|
</property>
|
71
|
+
<property name="font">
|
72
|
+
<font>
|
73
|
+
<family>JetBrains Mono ExtraLight</family>
|
74
|
+
<pointsize>12</pointsize>
|
75
|
+
</font>
|
76
|
+
</property>
|
65
77
|
<property name="sizeAdjustPolicy">
|
66
78
|
<enum>QAbstractScrollArea::AdjustToContents</enum>
|
67
79
|
</property>
|
@@ -93,6 +105,12 @@
|
|
93
105
|
<property name="focusPolicy">
|
94
106
|
<enum>Qt::ClickFocus</enum>
|
95
107
|
</property>
|
108
|
+
<property name="font">
|
109
|
+
<font>
|
110
|
+
<family>JetBrains Mono ExtraLight</family>
|
111
|
+
<pointsize>12</pointsize>
|
112
|
+
</font>
|
113
|
+
</property>
|
96
114
|
<property name="sizeAdjustPolicy">
|
97
115
|
<enum>QAbstractScrollArea::AdjustToContents</enum>
|
98
116
|
</property>
|
not1mm/lib/cat_interface.py
CHANGED
@@ -81,7 +81,11 @@ class CAT:
|
|
81
81
|
}
|
82
82
|
|
83
83
|
if self.interface == "flrig":
|
84
|
-
|
84
|
+
if not self.__check_sane_ip(self.host):
|
85
|
+
self.online = False
|
86
|
+
return
|
87
|
+
|
88
|
+
target = f"http://{self.host}:{self.port}"
|
85
89
|
logger.debug("%s", target)
|
86
90
|
self.server = xmlrpc.client.ServerProxy(target)
|
87
91
|
self.online = True
|
@@ -91,15 +95,30 @@ class CAT:
|
|
91
95
|
ConnectionRefusedError,
|
92
96
|
xmlrpc.client.Fault,
|
93
97
|
http.client.BadStatusLine,
|
98
|
+
socket.error,
|
99
|
+
socket.gaierror,
|
94
100
|
):
|
95
101
|
self.online = False
|
96
102
|
elif self.interface == "rigctld":
|
103
|
+
if not self.__check_sane_ip(self.host):
|
104
|
+
self.online = False
|
105
|
+
return
|
97
106
|
self.__initialize_rigctrld()
|
98
107
|
elif self.interface == "fake":
|
99
108
|
self.online = True
|
100
109
|
logger.debug("Using Fake Rig")
|
101
110
|
return
|
102
111
|
|
112
|
+
def __check_sane_ip(self, ip: str) -> bool:
|
113
|
+
"""check if IP address look normal"""
|
114
|
+
x = ip.split(".")
|
115
|
+
if len(x) != 4:
|
116
|
+
return False
|
117
|
+
for y in x:
|
118
|
+
if not y.isnumeric():
|
119
|
+
return False
|
120
|
+
return True
|
121
|
+
|
103
122
|
def __initialize_rigctrld(self):
|
104
123
|
try:
|
105
124
|
self.rigctrlsocket = socket.socket()
|
@@ -107,7 +126,13 @@ class CAT:
|
|
107
126
|
self.rigctrlsocket.connect((self.host, self.port))
|
108
127
|
logger.debug("Connected to rigctrld")
|
109
128
|
self.online = True
|
110
|
-
except (
|
129
|
+
except (
|
130
|
+
ConnectionRefusedError,
|
131
|
+
TimeoutError,
|
132
|
+
OSError,
|
133
|
+
socket.error,
|
134
|
+
socket.gaierror,
|
135
|
+
) as exception:
|
111
136
|
self.rigctrlsocket = None
|
112
137
|
self.online = False
|
113
138
|
logger.debug("%s", f"{exception}")
|
@@ -233,6 +258,7 @@ class CAT:
|
|
233
258
|
http.client.BadStatusLine,
|
234
259
|
http.client.CannotSendRequest,
|
235
260
|
http.client.ResponseNotReady,
|
261
|
+
AttributeError,
|
236
262
|
) as exception:
|
237
263
|
self.online = False
|
238
264
|
logger.debug(f"{exception=}")
|
@@ -280,6 +306,7 @@ class CAT:
|
|
280
306
|
http.client.BadStatusLine,
|
281
307
|
http.client.CannotSendRequest,
|
282
308
|
http.client.ResponseNotReady,
|
309
|
+
AttributeError,
|
283
310
|
) as exception:
|
284
311
|
self.online = False
|
285
312
|
logger.debug("%s", f"{exception}")
|
@@ -329,6 +356,7 @@ class CAT:
|
|
329
356
|
http.client.BadStatusLine,
|
330
357
|
http.client.CannotSendRequest,
|
331
358
|
http.client.ResponseNotReady,
|
359
|
+
AttributeError,
|
332
360
|
) as exception:
|
333
361
|
self.online = False
|
334
362
|
logger.debug("getbw_flrig: %s", f"{exception}")
|
@@ -453,6 +481,7 @@ class CAT:
|
|
453
481
|
http.client.BadStatusLine,
|
454
482
|
http.client.CannotSendRequest,
|
455
483
|
http.client.ResponseNotReady,
|
484
|
+
AttributeError,
|
456
485
|
) as exception:
|
457
486
|
self.online = False
|
458
487
|
logger.debug("%s", f"{exception}")
|
@@ -502,6 +531,7 @@ class CAT:
|
|
502
531
|
http.client.BadStatusLine,
|
503
532
|
http.client.CannotSendRequest,
|
504
533
|
http.client.ResponseNotReady,
|
534
|
+
AttributeError,
|
505
535
|
) as exception:
|
506
536
|
self.online = False
|
507
537
|
logger.debug("setvfo_flrig: %s", f"{exception}")
|
@@ -547,6 +577,7 @@ class CAT:
|
|
547
577
|
http.client.BadStatusLine,
|
548
578
|
http.client.CannotSendRequest,
|
549
579
|
http.client.ResponseNotReady,
|
580
|
+
AttributeError,
|
550
581
|
) as exception:
|
551
582
|
self.online = False
|
552
583
|
logger.debug(f"{exception=}")
|
@@ -590,6 +621,7 @@ class CAT:
|
|
590
621
|
http.client.BadStatusLine,
|
591
622
|
http.client.CannotSendRequest,
|
592
623
|
http.client.ResponseNotReady,
|
624
|
+
AttributeError,
|
593
625
|
) as exception:
|
594
626
|
self.online = False
|
595
627
|
logger.debug("setpower_flrig: %s", f"{exception}")
|
@@ -648,6 +680,7 @@ class CAT:
|
|
648
680
|
http.client.BadStatusLine,
|
649
681
|
http.client.CannotSendRequest,
|
650
682
|
http.client.ResponseNotReady,
|
683
|
+
AttributeError,
|
651
684
|
) as exception:
|
652
685
|
self.online = False
|
653
686
|
logger.debug("%s", f"{exception}")
|
@@ -686,6 +719,7 @@ class CAT:
|
|
686
719
|
http.client.BadStatusLine,
|
687
720
|
http.client.CannotSendRequest,
|
688
721
|
http.client.ResponseNotReady,
|
722
|
+
AttributeError,
|
689
723
|
) as exception:
|
690
724
|
self.online = False
|
691
725
|
logger.debug("%s", f"{exception}")
|
not1mm/lib/cwinterface.py
CHANGED
@@ -31,6 +31,9 @@ class CW:
|
|
31
31
|
self.speed = 20
|
32
32
|
self.winkeyer_functions = []
|
33
33
|
if self.servertype == 2:
|
34
|
+
if not self.__check_sane_ip(self.host):
|
35
|
+
logger.critical(f"Bad IP: {self.host}")
|
36
|
+
return
|
34
37
|
with ServerProxy(f"http://{self.host}:{self.port}") as proxy:
|
35
38
|
try:
|
36
39
|
self.winkeyer_functions = proxy.system.listMethods()
|
@@ -47,6 +50,16 @@ class CW:
|
|
47
50
|
"http://%s:%s, xmlrpc Connection Refused", self.host, self.port
|
48
51
|
)
|
49
52
|
|
53
|
+
def __check_sane_ip(self, ip: str) -> bool:
|
54
|
+
"""check if IP address look normal"""
|
55
|
+
x = ip.split(".")
|
56
|
+
if len(x) != 4:
|
57
|
+
return False
|
58
|
+
for y in x:
|
59
|
+
if not y.isnumeric():
|
60
|
+
return False
|
61
|
+
return True
|
62
|
+
|
50
63
|
def sendcw(self, texttosend):
|
51
64
|
"""sends cw to k1el"""
|
52
65
|
logger.debug(f"{texttosend=} {self.servertype=}")
|
@@ -61,7 +74,7 @@ class CW:
|
|
61
74
|
def _sendcw_xmlrpc(self, texttosend):
|
62
75
|
"""sends cw to xmlrpc"""
|
63
76
|
logger.debug("xmlrpc: %s", texttosend)
|
64
|
-
if texttosend:
|
77
|
+
if texttosend and self.__check_sane_ip(self.host):
|
65
78
|
with ServerProxy(f"http://{self.host}:{self.port}") as proxy:
|
66
79
|
try:
|
67
80
|
proxy.k1elsendstring(texttosend)
|
@@ -76,23 +89,35 @@ class CW:
|
|
76
89
|
logger.debug(
|
77
90
|
"http://%s:%s, xmlrpc Connection Refused", self.host, self.port
|
78
91
|
)
|
92
|
+
else:
|
93
|
+
logger.critical(f"Bad IP: {self.host}")
|
79
94
|
|
80
95
|
def _sendcw_udp(self, texttosend):
|
81
96
|
"""send cw to udp port"""
|
82
97
|
logger.debug("UDP: %s", texttosend)
|
83
|
-
if texttosend:
|
98
|
+
if texttosend and self.__check_sane_ip(self.host):
|
84
99
|
server_address_port = (self.host, self.port)
|
85
100
|
# bufferSize = 1024
|
86
101
|
udp_client_socket = socket.socket(
|
87
102
|
family=socket.AF_INET, type=socket.SOCK_DGRAM
|
88
103
|
)
|
89
|
-
|
104
|
+
try:
|
105
|
+
udp_client_socket.sendto(
|
106
|
+
bytes(texttosend, "utf-8"), server_address_port
|
107
|
+
)
|
108
|
+
except socket.gaierror:
|
109
|
+
...
|
110
|
+
else:
|
111
|
+
logger.critical(f"Bad IP: {self.host.encode()}")
|
90
112
|
|
91
113
|
def _sendcwcat(self, texttosend):
|
92
114
|
"""..."""
|
93
115
|
|
94
116
|
def set_winkeyer_speed(self, speed):
|
95
117
|
"""doc"""
|
118
|
+
if not self.__check_sane_ip(self.host):
|
119
|
+
logger.critical(f"Bad IP: {self.host}")
|
120
|
+
return
|
96
121
|
with ServerProxy(f"http://{self.host}:{self.port}") as proxy:
|
97
122
|
try:
|
98
123
|
if "setspeed" in self.winkeyer_functions:
|
not1mm/lib/version.py
CHANGED
not1mm/test.py
ADDED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: not1mm
|
3
|
-
Version: 24.11.
|
3
|
+
Version: 24.11.15
|
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
|
@@ -236,6 +236,8 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
|
|
236
236
|
|
237
237
|
## Recent Changes (Polishing the Turd)
|
238
238
|
|
239
|
+
- [24-11-15] Made checkwindow font bigger and match a little more contrasted.
|
240
|
+
- [24-11-12] add check for ipv4 address for CAT.
|
239
241
|
- [24-11-10] ReJiggered CAT/flrig interface to hopefull make it more workable.
|
240
242
|
- [24-11-6] Added Call history to ARRL VHF, CQ160, CQWW, StewPerry, Weekly RTTY
|
241
243
|
- [24-11-5] Fix crash with bad qrz credentials.
|
@@ -858,7 +860,7 @@ change.
|
|
858
860
|
I caved and started working on ESM or Enter Sends Message. To test it out you can
|
859
861
|
go to `FILE -> Configuration Settings`
|
860
862
|
|
861
|
-

|
862
864
|
|
863
865
|
Check the mark to Enable ESM and tell it which function keys do what. The keys will need
|
864
866
|
to have the same function in both Run and S&P modes. The function keys will highlight
|
@@ -902,7 +904,50 @@ QRZ (for Run) or Exchange (for S&P) is sent.
|
|
902
904
|
|
903
905
|
## Call History Files
|
904
906
|
|
905
|
-
I've started work on using 'call history files'.
|
907
|
+
I've started work on using 'call history files'. To test it, you can
|
908
|
+
go to `FILE -> Configuration Settings`
|
909
|
+
|
910
|
+

|
911
|
+
|
912
|
+
Place a check in the `Use Call History` box. Call history files are very specific to the contest you are working. Example files can be obtained from [n1mm's](https://n1mmwp.hamdocs.com/mmfiles/categories/callhistory/?) website. They have a searchbox so you can find the contest you are looking for. If you are feeling masocistic, you can craft your own. The general makeup of the file is a header defining the fields to be used, followed by by lines of comma separated data.
|
913
|
+
|
914
|
+
An example file excerpt looks like:
|
915
|
+
|
916
|
+
```text
|
917
|
+
!!Order!!,Call,Name,State,UserText,
|
918
|
+
#
|
919
|
+
# 0-This is helping file, LOG what is sent.
|
920
|
+
# 1-Last Edit,2024-08-18
|
921
|
+
# 2-Send any corrections direct to ve2fk@arrl.net
|
922
|
+
# 3-Updated from the log of Marsh/KA5M
|
923
|
+
# 4-Thanks Bjorn SM7IUN for his help.
|
924
|
+
# 5-Thanks
|
925
|
+
# NAQPCW
|
926
|
+
# NAQPRTTY
|
927
|
+
# NAQPSSB
|
928
|
+
# SPRINTCW
|
929
|
+
# SPRINTLADD
|
930
|
+
# SPRINTNS
|
931
|
+
# SPRINTRTTY
|
932
|
+
# SPRINTSSB
|
933
|
+
AA0AC,DAVE,MN,Example UserText
|
934
|
+
AA0AI,STEVE,IA,
|
935
|
+
AA0AO,TOM,MN,
|
936
|
+
AA0AW,DOUG,MN,
|
937
|
+
AA0BA,,TN,
|
938
|
+
AA0BR,,CO,
|
939
|
+
AA0BW,,MO,
|
940
|
+
```
|
941
|
+
|
942
|
+
The first line is the field definition header. The lines starting with a `#` are comments. Some of the comments are other contests that this file also works with.
|
943
|
+
This is followed by the actual data. If the matched call has `UserText` information, that user text is populated to the bottom left of the logging window.
|
944
|
+
|
945
|
+
So if one were to go to `FILE -> LOAD CALL HISTORY FILE` and choose a downloaded call history file for NAQP and typed in the call AA0AC while operating in the NAQP, after pressing space, one would see:
|
946
|
+
|
947
|
+

|
948
|
+
|
949
|
+
Where the Name and State would auto-populate and the UserText info apprears in the bottom left.
|
950
|
+
|
906
951
|
|
907
952
|
## Contest specific notes
|
908
953
|
|
@@ -1,11 +1,12 @@
|
|
1
1
|
not1mm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
2
|
-
not1mm/__main__.py,sha256=
|
2
|
+
not1mm/__main__.py,sha256=4-LleuZUg7ap_uXRgGPlHF_oATLdikKmGosNBFiEs7w,142026
|
3
3
|
not1mm/bandmap.py,sha256=X6mMHXS1kXBbUPZCaKgiVJ6Dz6DE6LEQqtEXfT3telg,30811
|
4
|
-
not1mm/checkwindow.py,sha256=
|
4
|
+
not1mm/checkwindow.py,sha256=VFAcKYTcoWhmIf91chwY6tyao9FQMWPiUkgDDkkWaog,9670
|
5
5
|
not1mm/fsutils.py,sha256=ukHKxKTeNKxKwqRaJjtzRShL4X5Xl0jRBbADyy3Ifp8,1701
|
6
6
|
not1mm/logwindow.py,sha256=TvpzQTNB92hISlUO3iWBqtlPmlebdhOkAArx0DNGcOs,43966
|
7
7
|
not1mm/lookupservice.py,sha256=4c36x_1G3Sy69gQfJ6El7vHLIKTjLGH67ziPPoeYweM,2648
|
8
8
|
not1mm/radio.py,sha256=khmyESHaXUDF2hGQ5v3atEOd1YACrOAsuoIA4XgNtlc,5340
|
9
|
+
not1mm/test.py,sha256=RN71m2S9MPIOJMaoCi0wZhwEhpEZunvtosZxaKahRB4,101
|
9
10
|
not1mm/vfo.py,sha256=ggPyWtxMbdSE5RwdK0nDRwDNqOxdpb_pvnzZdbzZVQE,11136
|
10
11
|
not1mm/voice_keying.py,sha256=sA3gw5_k7kShTg2qhG7HkKDM5M6KheJVRkAc_C7mxDk,3006
|
11
12
|
not1mm/data/JetBrainsMono-ExtraLight.ttf,sha256=g5Hn7BPounWMGDj1a8zZcyKMz03HSqW__pUluRR7Evg,274144
|
@@ -14,7 +15,7 @@ not1mm/data/about.ui,sha256=IzbwKQZ_Ea06qGEjJgsa7g8-oYk549f-MEpLtChiLvw,2078
|
|
14
15
|
not1mm/data/alpha bravo charlie delta.txt,sha256=d5QMmSWEUAe4Rj1XbNjTPLa_5Be4Se6u5LUIqAYidOQ,224
|
15
16
|
not1mm/data/bandmap.ui,sha256=hvovf1YKyfUVVbKl6Ib2zU4RdUrFsQwm-255wVeKXZE,7180
|
16
17
|
not1mm/data/check.png,sha256=UvFOLr8V-79qnjW8wUaGItXk_OSP8m8hqPevs8NDlFY,387
|
17
|
-
not1mm/data/checkwindow.ui,sha256=
|
18
|
+
not1mm/data/checkwindow.ui,sha256=PRD98K0julJ9EfWqoE89dT8UPuPKQzGiWBk_efAko3o,5141
|
18
19
|
not1mm/data/configuration.ui,sha256=iva5exfJJFBiiITpz6vgCB8e_j0lgsLeVWOltxtUk4g,70006
|
19
20
|
not1mm/data/contests.sql,sha256=4hmJCDvrbxnA_Y5S4T5o52TZieeFk6QUwFerwlFePNA,89307
|
20
21
|
not1mm/data/cty.json,sha256=dPG9K1Pm4Rxd4uJom_gQ8y-sbqiZfILpl4kBAFnOveU,4877142
|
@@ -94,8 +95,8 @@ not1mm/data/phonetics/yourcall.wav,sha256=4kheHJmCiRDL2kjhlgXQ8_u_eEMgKxiNGu5UBk
|
|
94
95
|
not1mm/data/phonetics/z.wav,sha256=arafCi7fwmBLdVDI-PRyaL4U-03PIQDhffwY5noJ_2c,51768
|
95
96
|
not1mm/lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
96
97
|
not1mm/lib/about.py,sha256=sWycfGcruN3SaEe4JmaJ61K6D8Itq0WxpUYT-lEcmYM,416
|
97
|
-
not1mm/lib/cat_interface.py,sha256=
|
98
|
-
not1mm/lib/cwinterface.py,sha256=
|
98
|
+
not1mm/lib/cat_interface.py,sha256=ZSWXajCu38RI4d-VpGIUUjAMYSSMIPjaUrHkejJKmts,23908
|
99
|
+
not1mm/lib/cwinterface.py,sha256=yQL8Dif9oOIynaRItHgvcmu4mYv1TnTpqCHPtkeb09o,4472
|
99
100
|
not1mm/lib/database.py,sha256=nqWp2eJ7JfUTqaQ9AVbx3XjgtlRnYY9ruTQCv2YRreY,48310
|
100
101
|
not1mm/lib/edit_contact.py,sha256=Ki9bGPpqyQQBB1cU8VIBDCal3lbXeQ6qxhzklmhE2_w,353
|
101
102
|
not1mm/lib/edit_macro.py,sha256=raKWBwsHInj5EUKmvyLQ6gqc3ZFDlstsD3xqoM4PC8E,517
|
@@ -113,7 +114,7 @@ not1mm/lib/plugin_common.py,sha256=TbFUbftjELFt4QRdsjSHbqnXSngZOlSwlCTClqosDXA,9
|
|
113
114
|
not1mm/lib/select_contest.py,sha256=WsptLuwkouIHeocJL3oZ6-eUfEnhpwdc-x7eMZ_TIVM,359
|
114
115
|
not1mm/lib/settings.py,sha256=Xt0WE2ro_kUYdugQ0Pe1SQX07MHrJ0jyQqDqAKKqxuU,13564
|
115
116
|
not1mm/lib/super_check_partial.py,sha256=hwT2NRwobu0PLDyw6ltmbmcAtGBD02CKGFbgGWjXMqA,2334
|
116
|
-
not1mm/lib/version.py,sha256=
|
117
|
+
not1mm/lib/version.py,sha256=aRi6m4Au46BpRtaGyKGcmp5nXY8c2Dm0VCEx-MGaCGo,49
|
117
118
|
not1mm/lib/versiontest.py,sha256=8vDNptuBBunn-1IGkjNaquehqBYUJyjrPSF8Igmd4_Y,1286
|
118
119
|
not1mm/plugins/10_10_fall_cw.py,sha256=gNgTnafjM99cFvZ-6qBfWoOvd5Zj2Ehx6XjJvrHjm40,11872
|
119
120
|
not1mm/plugins/10_10_spring_cw.py,sha256=QME8LyLyTnHsA5sjGG19n_64-0gdgBMRRi9C8LpgQzs,11877
|
@@ -159,9 +160,9 @@ not1mm/plugins/ref_ssb.py,sha256=Z6ZqNInyGFwWNSHXrzCDlokMxZ6NQQ2Yi1c8CGfmNWE,209
|
|
159
160
|
not1mm/plugins/stew_perry_topband.py,sha256=DXbJYLJ7JpPotdvax74d2YOX5HaMUc-Fk1XvBXMhl9I,11879
|
160
161
|
not1mm/plugins/weekly_rtty.py,sha256=OLiLW3Xd-tylSy9onOXCxQwWfijx-O5PAgjHh7_vG1o,19496
|
161
162
|
not1mm/plugins/winter_field_day.py,sha256=E4Rn7bOpN2LNoRi4_aRDHd_8p5lxn1vG_ubGdzn5zB0,14891
|
162
|
-
not1mm-24.11.
|
163
|
-
not1mm-24.11.
|
164
|
-
not1mm-24.11.
|
165
|
-
not1mm-24.11.
|
166
|
-
not1mm-24.11.
|
167
|
-
not1mm-24.11.
|
163
|
+
not1mm-24.11.15.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
164
|
+
not1mm-24.11.15.dist-info/METADATA,sha256=QrqvyaHVbCpuvTMKzmAkv-GCu_grLvibO7wVjCgqewk,36244
|
165
|
+
not1mm-24.11.15.dist-info/WHEEL,sha256=R06PA3UVYHThwHvxuRWMqaGcr-PuniXahwjmQRFMEkY,91
|
166
|
+
not1mm-24.11.15.dist-info/entry_points.txt,sha256=pMcZk_0dxFgLkcUkF0Q874ojpwOmF3OL6EKw9LgvocM,47
|
167
|
+
not1mm-24.11.15.dist-info/top_level.txt,sha256=0YmTxEcDzQlzXub-lXASvoLpg_mt1c2thb5cVkDf5J4,7
|
168
|
+
not1mm-24.11.15.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|