not1mm 25.3.24__py3-none-any.whl → 25.3.25.1__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
@@ -864,6 +864,9 @@ class MainWindow(QtWidgets.QMainWindow):
864
864
  def dockwidget_message(self, msg):
865
865
  """signal from bandmap"""
866
866
  if msg:
867
+ if msg.get("cmd", "") == "CONTACTCHANGED":
868
+ if self.statistics_window:
869
+ self.statistics_window.msg_from_main(msg)
867
870
  if msg.get("cmd", "") == "GETCOLUMNS":
868
871
  if hasattr(self.contest, "columns"):
869
872
  cmd = {}
not1mm/data/statistics.ui CHANGED
@@ -10,34 +10,18 @@
10
10
  <height>192</height>
11
11
  </rect>
12
12
  </property>
13
+ <property name="font">
14
+ <font>
15
+ <family>JetBrains Mono ExtraLight</family>
16
+ </font>
17
+ </property>
13
18
  <property name="windowTitle">
14
19
  <string>Stats</string>
15
20
  </property>
16
21
  <widget class="QWidget" name="dockWidgetContents">
17
22
  <layout class="QGridLayout" name="gridLayout">
18
23
  <item row="1" column="2">
19
- <widget class="QTableWidget" name="tableWidget">
20
- <column>
21
- <property name="text">
22
- <string>Band</string>
23
- </property>
24
- </column>
25
- <column>
26
- <property name="text">
27
- <string>QSO's</string>
28
- </property>
29
- </column>
30
- <column>
31
- <property name="text">
32
- <string>Calls</string>
33
- </property>
34
- </column>
35
- <column>
36
- <property name="text">
37
- <string>Points</string>
38
- </property>
39
- </column>
40
- </widget>
24
+ <widget class="QTableWidget" name="tableWidget"/>
41
25
  </item>
42
26
  </layout>
43
27
  </widget>
not1mm/lib/version.py CHANGED
@@ -1,3 +1,3 @@
1
1
  """It's the version"""
2
2
 
3
- __version__ = "25.3.24"
3
+ __version__ = "25.3.25.1"
not1mm/logwindow.py CHANGED
@@ -4,7 +4,7 @@ not1mm Contest logger
4
4
  Email: michael.bridak@gmail.com
5
5
  GPL V3
6
6
  Class: LogWindow
7
- Purpose: Onscreen widget to show and edit logged contacts.
7
+ Purpose: Onscreen widget to show and edit logged contacts.
8
8
  """
9
9
  # pylint: disable=no-name-in-module, unused-import, no-member, c-extension-no-member
10
10
  # pylint: disable=logging-fstring-interpolation, too-many-lines
@@ -164,6 +164,11 @@ class LogWindow(QDockWidget):
164
164
  log.verticalHeader().setVisible(False)
165
165
 
166
166
  self.get_log()
167
+ self.generalLog.resizeColumnsToContents()
168
+ self.generalLog.resizeRowsToContents()
169
+ self.focusedLog.resizeColumnsToContents()
170
+ self.focusedLog.resizeRowsToContents()
171
+
167
172
  cmd = {}
168
173
  cmd["cmd"] = "GETCOLUMNS"
169
174
  self.message.emit(cmd)
@@ -404,6 +409,10 @@ class LogWindow(QDockWidget):
404
409
  }
405
410
  self.database.change_contact(db_record)
406
411
 
412
+ cmd = {}
413
+ cmd["cmd"] = "CONTACTCHANGED"
414
+ self.message.emit(cmd)
415
+
407
416
  if self.n1mm.send_contact_packets:
408
417
  self.n1mm.contact_info["timestamp"] = db_record["TS"]
409
418
  self.n1mm.contact_info["contestname"] = self.contact["ContestName"].replace(
@@ -517,6 +526,10 @@ class LogWindow(QDockWidget):
517
526
  }
518
527
  self.database.change_contact(db_record)
519
528
 
529
+ cmd = {}
530
+ cmd["cmd"] = "CONTACTCHANGED"
531
+ self.message.emit(cmd)
532
+
520
533
  if self.n1mm.send_contact_packets:
521
534
  self.n1mm.contact_info["timestamp"] = db_record["TS"]
522
535
  self.n1mm.contact_info["contestname"] = self.contact["ContestName"].replace(
@@ -731,6 +744,9 @@ class LogWindow(QDockWidget):
731
744
 
732
745
  self.database.change_contact(self.contact)
733
746
  self.get_log()
747
+ cmd = {}
748
+ cmd["cmd"] = "CONTACTCHANGED"
749
+ self.message.emit(cmd)
734
750
  self.show_like_calls(self.contact.get("Call", ""))
735
751
 
736
752
  def delete_contact(self) -> None:
@@ -758,6 +774,9 @@ class LogWindow(QDockWidget):
758
774
  self.n1mm.send_contact_delete()
759
775
  self.edit_contact_dialog.close()
760
776
  self.get_log()
777
+ cmd = {}
778
+ cmd["cmd"] = "CONTACTCHANGED"
779
+ self.message.emit(cmd)
761
780
  self.show_like_calls(self.contact.get("Call", ""))
762
781
 
763
782
  def get_log(self) -> None:
@@ -927,6 +946,10 @@ class LogWindow(QDockWidget):
927
946
  )
928
947
  self.generalLog.blockSignals(False)
929
948
  self.focusedLog.blockSignals(False)
949
+ self.generalLog.resizeColumnsToContents()
950
+ self.generalLog.resizeRowsToContents()
951
+ self.focusedLog.resizeColumnsToContents()
952
+ self.focusedLog.resizeRowsToContents()
930
953
 
931
954
  def show_like_calls(self, call: str) -> None:
932
955
  """
not1mm/statistics.py CHANGED
@@ -6,9 +6,9 @@ import os
6
6
 
7
7
  from PyQt6 import uic, QtWidgets
8
8
  from PyQt6.QtWidgets import QDockWidget
9
- from PyQt6.QtCore import pyqtSignal, QTimer
9
+ from PyQt6.QtCore import pyqtSignal
10
10
 
11
- # from PyQt6.QtGui import QColorConstants, QPalette, QColor
11
+ from PyQt6.QtGui import QColorConstants, QPalette, QColor
12
12
 
13
13
  import not1mm.fsutils as fsutils
14
14
  from not1mm.lib.database import DataBase
@@ -43,9 +43,6 @@ class StatsWindow(QDockWidget):
43
43
  self.database = DataBase(self.dbname, fsutils.APP_DATA_PATH)
44
44
  self.database.current_contest = self.pref.get("contest", 0)
45
45
  uic.loadUi(fsutils.APP_DATA_PATH / "statistics.ui", self)
46
- self.timer = QTimer()
47
- self.timer.timeout.connect(self.get_run_and_total_qs)
48
- self.timer.start(5000)
49
46
 
50
47
  def msg_from_main(self, packet):
51
48
  """"""
@@ -56,6 +53,10 @@ class StatsWindow(QDockWidget):
56
53
  if self.active is False:
57
54
  return
58
55
 
56
+ if packet.get("cmd", "") == "CONTACTCHANGED":
57
+ self.get_run_and_total_qs()
58
+ return
59
+
59
60
  if packet.get("cmd", "") == "UPDATELOG":
60
61
  logger.debug("External refresh command.")
61
62
  self.get_run_and_total_qs()
@@ -68,6 +69,7 @@ class StatsWindow(QDockWidget):
68
69
  )
69
70
  self.database = DataBase(self.dbname, fsutils.APP_DATA_PATH)
70
71
  self.database.current_contest = self.pref.get("contest", 0)
72
+ self.get_run_and_total_qs()
71
73
 
72
74
  def setActive(self, mode: bool) -> None:
73
75
  self.active = bool(mode)
@@ -75,6 +77,46 @@ class StatsWindow(QDockWidget):
75
77
  def setDarkMode(self, dark: bool) -> None:
76
78
  """Forces a darkmode palette."""
77
79
 
80
+ if dark:
81
+ darkPalette = QPalette()
82
+ darkColor = QColor(56, 56, 56)
83
+ disabledColor = QColor(127, 127, 127)
84
+ darkPalette.setColor(QPalette.ColorRole.Window, darkColor)
85
+ darkPalette.setColor(QPalette.ColorRole.WindowText, QColorConstants.White)
86
+ darkPalette.setColor(QPalette.ColorRole.Base, QColor(45, 45, 45))
87
+ darkPalette.setColor(QPalette.ColorRole.AlternateBase, darkColor)
88
+ darkPalette.setColor(QPalette.ColorRole.Text, QColorConstants.White)
89
+ darkPalette.setColor(QPalette.ColorRole.Button, darkColor)
90
+ darkPalette.setColor(QPalette.ColorRole.ButtonText, QColorConstants.White)
91
+ darkPalette.setColor(QPalette.ColorRole.BrightText, QColorConstants.Red)
92
+ darkPalette.setColor(QPalette.ColorRole.Link, QColor(42, 130, 218))
93
+ darkPalette.setColor(QPalette.ColorRole.Highlight, QColor(42, 130, 218))
94
+ darkPalette.setColor(
95
+ QPalette.ColorRole.HighlightedText, QColorConstants.Black
96
+ )
97
+ darkPalette.setColor(
98
+ QPalette.ColorGroup.Disabled,
99
+ QPalette.ColorRole.ButtonText,
100
+ disabledColor,
101
+ )
102
+ darkPalette.setColor(
103
+ QPalette.ColorGroup.Disabled,
104
+ QPalette.ColorRole.HighlightedText,
105
+ disabledColor,
106
+ )
107
+ darkPalette.setColor(
108
+ QPalette.ColorGroup.Disabled,
109
+ QPalette.ColorRole.Text,
110
+ disabledColor,
111
+ )
112
+
113
+ self.setPalette(darkPalette)
114
+ self.current_palette = darkPalette
115
+ else:
116
+ palette = self.style().standardPalette()
117
+ self.setPalette(palette)
118
+ self.current_palette = palette
119
+
78
120
  def load_pref(self) -> None:
79
121
  """
80
122
  Load preference file to get current db filename and sets the initial darkmode state.
@@ -124,27 +166,27 @@ class StatsWindow(QDockWidget):
124
166
  for band in result:
125
167
  query = f"select count(*) as qs, count(DISTINCT(Call)) as calls, sum(Points) as points from DXLOG where ContestNR = {self.database.current_contest} and Band = '{band['band']}';"
126
168
  result = self.database.exec_sql(query)
127
- item = QtWidgets.QTableWidgetItem(str(band["band"]))
169
+ item = QtWidgets.QTableWidgetItem(str(band.get("band", "")))
128
170
  item.setTextAlignment(0x0002)
129
171
  self.tableWidget.setItem(row, 0, item)
130
- item = QtWidgets.QTableWidgetItem(str(result["qs"]))
172
+ item = QtWidgets.QTableWidgetItem(str(result.get("qs", "0")))
131
173
  item.setTextAlignment(0x0002)
132
174
  self.tableWidget.setItem(row, 1, item)
133
- item = QtWidgets.QTableWidgetItem(str(result["calls"]))
175
+ item = QtWidgets.QTableWidgetItem(str(result.get("calls", "0")))
134
176
  item.setTextAlignment(0x0002)
135
177
  self.tableWidget.setItem(row, 2, item)
136
- item = QtWidgets.QTableWidgetItem(str(result["points"]))
178
+ item = QtWidgets.QTableWidgetItem(str(result.get("points", "0")))
137
179
  item.setTextAlignment(0x0002)
138
180
  self.tableWidget.setItem(row, 6, item)
139
181
  query = f"select sum(sortedmode.mode == 'CW') as CW, sum(sortedmode.mode == 'PH') as PH, sum(sortedmode.mode == 'DI') as DI from (select CASE Mode WHEN 'LSB' THEN 'PH' WHEN 'USB' THEN 'PH' WHEN 'CW' THEN 'CW' WHEN 'RTTY' THEN 'DI' ELSE 'OTHER' END mode from DXLOG where ContestNR = {self.database.current_contest} and Band = '{band['band']}') as sortedmode;"
140
182
  result = self.database.exec_sql(query)
141
- item = QtWidgets.QTableWidgetItem(str(result["CW"]))
183
+ item = QtWidgets.QTableWidgetItem(str(result.get("CW", "0")))
142
184
  item.setTextAlignment(0x0002)
143
185
  self.tableWidget.setItem(row, 3, item)
144
- item = QtWidgets.QTableWidgetItem(str(result["PH"]))
186
+ item = QtWidgets.QTableWidgetItem(str(result.get("PH", "0")))
145
187
  item.setTextAlignment(0x0002)
146
188
  self.tableWidget.setItem(row, 4, item)
147
- item = QtWidgets.QTableWidgetItem(str(result["DI"]))
189
+ item = QtWidgets.QTableWidgetItem(str(result.get("DI", "0")))
148
190
  item.setTextAlignment(0x0002)
149
191
  self.tableWidget.setItem(row, 5, item)
150
192
 
@@ -154,25 +196,25 @@ class StatsWindow(QDockWidget):
154
196
  item = QtWidgets.QTableWidgetItem("TOTAL")
155
197
  item.setTextAlignment(0x0002)
156
198
  self.tableWidget.setItem(row, 0, item)
157
- item = QtWidgets.QTableWidgetItem(str(result["qs"]))
199
+ item = QtWidgets.QTableWidgetItem(str(result.get("qs", "0")))
158
200
  item.setTextAlignment(0x0002)
159
201
  self.tableWidget.setItem(row, 1, item)
160
- item = QtWidgets.QTableWidgetItem(str(result["calls"]))
202
+ item = QtWidgets.QTableWidgetItem(str(result.get("calls", "0")))
161
203
  item.setTextAlignment(0x0002)
162
204
  self.tableWidget.setItem(row, 2, item)
163
- item = QtWidgets.QTableWidgetItem(str(result["points"]))
205
+ item = QtWidgets.QTableWidgetItem(str(result.get("points", "0")))
164
206
  item.setTextAlignment(0x0002)
165
207
  self.tableWidget.setItem(row, 6, item)
166
208
 
167
209
  query = f"select sum(sortedmode.mode == 'CW') as CW, sum(sortedmode.mode == 'PH') as PH, sum(sortedmode.mode == 'DI') as DI from (select CASE Mode WHEN 'LSB' THEN 'PH' WHEN 'USB' THEN 'PH' WHEN 'CW' THEN 'CW' WHEN 'RTTY' THEN 'DI' ELSE 'OTHER' END mode from DXLOG where ContestNR = {self.database.current_contest}) as sortedmode;"
168
210
  result = self.database.exec_sql(query)
169
- item = QtWidgets.QTableWidgetItem(str(result["CW"]))
211
+ item = QtWidgets.QTableWidgetItem(str(result.get("CW", "0")))
170
212
  item.setTextAlignment(0x0002)
171
213
  self.tableWidget.setItem(row, 3, item)
172
- item = QtWidgets.QTableWidgetItem(str(result["PH"]))
214
+ item = QtWidgets.QTableWidgetItem(str(result.get("PH", "0")))
173
215
  item.setTextAlignment(0x0002)
174
216
  self.tableWidget.setItem(row, 4, item)
175
- item = QtWidgets.QTableWidgetItem(str(result["DI"]))
217
+ item = QtWidgets.QTableWidgetItem(str(result.get("DI", "0")))
176
218
  item.setTextAlignment(0x0002)
177
219
  self.tableWidget.setItem(row, 5, item)
178
220
  self.tableWidget.resizeColumnsToContents()
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: not1mm
3
- Version: 25.3.24
3
+ Version: 25.3.25.1
4
4
  Summary: NOT1MM Logger
5
5
  Author-email: Michael Bridak <michael.bridak@gmail.com>
6
- License-Expression: GPL-3.0-or-later
6
+ License: GPL-3.0-or-later
7
7
  Project-URL: Homepage, https://github.com/mbridak/not1mm
8
8
  Project-URL: Bug Tracker, https://github.com/mbridak/not1mm/issues
9
9
  Classifier: Programming Language :: Python :: 3
@@ -247,6 +247,8 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
247
247
 
248
248
  ## Recent Changes
249
249
 
250
+ - [25-3-25-1] Improved process messaging.
251
+ - [25-3-25] Use safer dict key access in the stats window.
250
252
  - [25-3-24] Add CW, PH, DI counts to the statistics window.
251
253
  - [25-3-23] Add a statistics window.
252
254
  - [25-3-19-1] Add EA His Maj King of Spain SSB.
@@ -1,14 +1,14 @@
1
1
  not1mm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- not1mm/__main__.py,sha256=TKA6hSE2A2SZpXvMySGXNVgfE3UKhvzSC8tSzzVZTBs,151537
2
+ not1mm/__main__.py,sha256=9ZLWDHNb5qJuxMEg5GKeD20UXuRHlrR-rIeN2u21Csw,151697
3
3
  not1mm/bandmap.py,sha256=mdSK6oj8plEmr6WVYkzPTCfsHWKl9lea3R14cmRsAI4,31531
4
4
  not1mm/checkwindow.py,sha256=VFAcKYTcoWhmIf91chwY6tyao9FQMWPiUkgDDkkWaog,9670
5
5
  not1mm/fsutils.py,sha256=ukHKxKTeNKxKwqRaJjtzRShL4X5Xl0jRBbADyy3Ifp8,1701
6
- not1mm/logwindow.py,sha256=TvpzQTNB92hISlUO3iWBqtlPmlebdhOkAArx0DNGcOs,43966
6
+ not1mm/logwindow.py,sha256=Djobfy13WQ0yZWw2ET6mDUsuJEOvbrsbt2RS0fW8-4E,44700
7
7
  not1mm/lookupservice.py,sha256=GkY_qHZfrW6XHf8upIoaG4hCFqm0fg6Ganu9ConGrIc,2628
8
8
  not1mm/radio.py,sha256=_b-tSFuDLoBKnABxrsafGQu2p33U-KOubY7-qgLV2yg,5408
9
9
  not1mm/ratewindow.py,sha256=UVkQt0nSB2COQlJQV6tFtsz4mP7d-Wj9jcjqvZw934Q,9891
10
10
  not1mm/rtc_service.py,sha256=axAwnCBuTr-QL0YwXtWvg9tjwhcFsiiEZFgFjOofX6k,2816
11
- not1mm/statistics.py,sha256=tQFg30ACVvr70d86-iESoogzrQ_oigPbqT-IZm1srpo,7659
11
+ not1mm/statistics.py,sha256=vZ76iaMZQLgOriKAg9SicmA_Y9qdiqHJ2T7IoOO5iXo,9620
12
12
  not1mm/test.py,sha256=RN71m2S9MPIOJMaoCi0wZhwEhpEZunvtosZxaKahRB4,101
13
13
  not1mm/vfo.py,sha256=ggPyWtxMbdSE5RwdK0nDRwDNqOxdpb_pvnzZdbzZVQE,11136
14
14
  not1mm/voice_keying.py,sha256=HZImqC5NgnyW2nknNYQ3b7I8-6S_hxpq5G4RcIRXn_k,3005
@@ -47,7 +47,7 @@ not1mm/data/rttymacros.txt,sha256=FQ2BnAChXF5w-tzmMnBOE8IgvviAEsd3cmmz4b8GOPk,46
47
47
  not1mm/data/settings.ui,sha256=rZmhUjFAyCA8B-cd4Ljrvz5qC3NKy6S3feYVh5WX-tw,40084
48
48
  not1mm/data/splash.png,sha256=85_BQotR1q24uCthrKm4SB_6ZOMwRjR-Jdp1XBHSTyg,5368
49
49
  not1mm/data/ssbmacros.txt,sha256=Q7MrkaBntbeg4yQSoMv3NLoM24V4y_RVati3_wmb0mY,464
50
- not1mm/data/statistics.ui,sha256=8hW3SxJzB4nsxo1DcJTF9oH4dPjvxo27qutAQsgl0dY,1073
50
+ not1mm/data/statistics.ui,sha256=JRpf-On3FsW-halZsfo0QOaiSi1m4tW9HWD3dAgLp0c,722
51
51
  not1mm/data/vfo.ui,sha256=-fmFMJLPDz0jmsOdCljL7vfmlAQgwyHkGZjomlIN3gc,2076
52
52
  not1mm/data/phonetics/0.wav,sha256=0OpYiR-3MK6fVHE6MB-HeOxSAPiDNMjqvx5JcIZtsQk,42590
53
53
  not1mm/data/phonetics/1.wav,sha256=OEAavA8cfVxFZwaT0HY9Wg9NAGEPKBhwhEdzGXkQs_U,30248
@@ -118,7 +118,7 @@ not1mm/lib/plugin_common.py,sha256=D1OBjyLmX7zuSPqgTCmHwXzAKA12J_zTQItvyIem-4Y,1
118
118
  not1mm/lib/select_contest.py,sha256=WsptLuwkouIHeocJL3oZ6-eUfEnhpwdc-x7eMZ_TIVM,359
119
119
  not1mm/lib/settings.py,sha256=mXffn8Xaj5KATPQinNBR0V5DbHWQPsRfh24_axWGYuk,15254
120
120
  not1mm/lib/super_check_partial.py,sha256=hwT2NRwobu0PLDyw6ltmbmcAtGBD02CKGFbgGWjXMqA,2334
121
- not1mm/lib/version.py,sha256=TwlZeMOON2yGjP4amQ9-MNVirRzyqwv4djYoZb27rkY,48
121
+ not1mm/lib/version.py,sha256=SKj4r7lEIjLeD8QQRRVxsZuo0H-n3mXD10xKg4YlIFo,50
122
122
  not1mm/lib/versiontest.py,sha256=8vDNptuBBunn-1IGkjNaquehqBYUJyjrPSF8Igmd4_Y,1286
123
123
  not1mm/plugins/10_10_fall_cw.py,sha256=P63dEhRmvsEV7ixHYg-qhs5zzj0_DJXjjPHQBQr8Wwg,14731
124
124
  not1mm/plugins/10_10_spring_cw.py,sha256=S_z-KbExH4_kfRbKo07zM-iVlJUKxFwzbm6LRnXYyNU,14734
@@ -173,9 +173,9 @@ not1mm/plugins/ref_ssb.py,sha256=tGK5XeFrc3z7l8OViG9DM3rc4HLUBF9S3SUkaAPrjQk,215
173
173
  not1mm/plugins/stew_perry_topband.py,sha256=LHt0WnWMRS_m5nO9BOIQs0kO38M6x-k4eaA4nbEqDVA,15353
174
174
  not1mm/plugins/weekly_rtty.py,sha256=4gfFg25KGkU9tKmwslHLc38qPAXuRGWNX48n582NC7w,20078
175
175
  not1mm/plugins/winter_field_day.py,sha256=jLgEr95hJCZoc3Fi95PiNeB06thPQHFI3zOHmR6NprE,15234
176
- not1mm-25.3.24.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
177
- not1mm-25.3.24.dist-info/METADATA,sha256=4mn9fR27nhlDe5Od0K68ySALpGrIapLrzohw9Fmtr9w,37303
178
- not1mm-25.3.24.dist-info/WHEEL,sha256=DK49LOLCYiurdXXOXwGJm6U4DkHkg4lcxjhqwRa0CP4,91
179
- not1mm-25.3.24.dist-info/entry_points.txt,sha256=pMcZk_0dxFgLkcUkF0Q874ojpwOmF3OL6EKw9LgvocM,47
180
- not1mm-25.3.24.dist-info/top_level.txt,sha256=0YmTxEcDzQlzXub-lXASvoLpg_mt1c2thb5cVkDf5J4,7
181
- not1mm-25.3.24.dist-info/RECORD,,
176
+ not1mm-25.3.25.1.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
177
+ not1mm-25.3.25.1.dist-info/METADATA,sha256=acj-Ll6ob6QsRdAa8uAjZvWUtb3Y1nYreeUPyVifVzc,37395
178
+ not1mm-25.3.25.1.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
179
+ not1mm-25.3.25.1.dist-info/entry_points.txt,sha256=pMcZk_0dxFgLkcUkF0Q874ojpwOmF3OL6EKw9LgvocM,47
180
+ not1mm-25.3.25.1.dist-info/top_level.txt,sha256=0YmTxEcDzQlzXub-lXASvoLpg_mt1c2thb5cVkDf5J4,7
181
+ not1mm-25.3.25.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (78.0.2)
2
+ Generator: setuptools (78.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5