pysfi 0.1.12__py3-none-any.whl → 0.1.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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pysfi
3
- Version: 0.1.12
3
+ Version: 0.1.13
4
4
  Summary: Single File commands for Interactive python.
5
5
  Requires-Python: >=3.8
6
6
  Requires-Dist: tomli>=2.4.0; python_version < '3.11'
@@ -1,15 +1,18 @@
1
- sfi/__init__.py,sha256=nJ-7R5yswQ4ew8RsZyWKYV8E6Xq9EGrknyOhesxJBSU,75
2
- sfi/cli.py,sha256=bUUTOg18sJQbSKSfsVANhlMgSj9yzO2txIzFAd9B2Ok,296
3
- sfi/alarmclock/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- sfi/alarmclock/alarmclock.py,sha256=0HoacKlGdYq_hINAdl54Cz2E_z6nNjPyqif2xcEBQss,12381
5
- sfi/bumpversion/__init__.py,sha256=v7s0aqGOHApzAHVwDoBCCtuqmjYvDEEVKS-VIAKN3PE,86
1
+ sfi/__init__.py,sha256=dZ1dacNjP1yRdG5N4-UtVhSZGUdEzRv4usjC1kr-3jY,116
2
+ sfi/cli.py,sha256=QF6-bdw8vOUMmFovjp4lYpWesHtae4oxHeEWDnt7_k8,504
3
+ sfi/alarmclock/__init__.py,sha256=yyFexrNdi65kz3l68YjT5Bdlq4FFqBR80H8vV7e_D58,75
4
+ sfi/alarmclock/alarmclock.py,sha256=ixVkbg548smUivRsqyI3YSZ81BWIrKawnuezAp3BzyE,11635
5
+ sfi/bumpversion/__init__.py,sha256=ajzMFse8CnLshD5qpKEr4fze3tnup2S9GWWyd7xpC2A,127
6
6
  sfi/bumpversion/bumpversion.py,sha256=HOyHLaE0sZajrlcVZ8hsim8mPjz77qwQVSo6aIzjMXE,20735
7
+ sfi/cleanbuild/__init__.py,sha256=V4WV0xUvTaNGxawfYqlLT98t_8FeiA7ec1NW6R0-pGE,101
7
8
  sfi/cleanbuild/cleanbuild.py,sha256=Fr6_cr3rj4llcEQ8yNTK-DHdSzmx1I4hYFJJHu5YEz0,5200
9
+ sfi/condasetup/__init__.py,sha256=a99mtb8qROZYvqLuhmlasVCgbmAL9nzVzOJFrVSWLGE,3
8
10
  sfi/condasetup/condasetup.py,sha256=RlbXVYcAJYMau-ZzHOMzHrHl4r-lqNZO0bT-zWuzP_k,4581
9
- sfi/docdiff/docdiff.py,sha256=RIq5cL2WnLohfqY-PRxlwhRJoYEUOOY1hpCAbfhzStk,7734
10
- sfi/docscan/__init__.py,sha256=Zog5sFgdZvJmsmNgGBSsyvu-Gcb1ecYf-l6e5ThSOH4,121
11
+ sfi/docdiff/__init__.py,sha256=a99mtb8qROZYvqLuhmlasVCgbmAL9nzVzOJFrVSWLGE,3
12
+ sfi/docdiff/docdiff.py,sha256=anilgq16icu-UxdgRR7B_57G9CFJ79xBSjOm9DOQluY,7736
13
+ sfi/docscan/__init__.py,sha256=HQzSYiozGNtCdC771DXce57YwdXzQiSWFQKaTnnjAQU,124
11
14
  sfi/docscan/docscan.py,sha256=rk8mjEI2SKNIliV-Yb41pfUmYBQ1tUhk5LHUNEjkszI,41890
12
- sfi/docscan/docscan_gui.py,sha256=T_blCyGGaWxL6rtjLIYW3nGdX8DpLQv73YbDnITR4eg,50671
15
+ sfi/docscan/docscan_gui.py,sha256=c7sJXvq5201Kh7iewalc50qoMnNR_eEna0NqoEJ7igw,52335
13
16
  sfi/docscan/lang/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
17
  sfi/docscan/lang/eng.py,sha256=GcOcT9FLcPZRdJ-MbLRYyf6vDweZTQBu_zUnEFzRY84,8529
15
18
  sfi/docscan/lang/zhcn.py,sha256=1SZwQjZF3oi9FsnzuZB-9v7P64sGm5oNmVjuL-rhcEQ,8885
@@ -17,20 +20,24 @@ sfi/filedate/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
20
  sfi/filedate/filedate.py,sha256=5FARcsB2Rlz2uTBxeYYjbIEJb9l1cyXj9WSoNKvSrRo,6068
18
21
  sfi/gittool/__init__.py,sha256=Xqxw7UUX-TKkWOCB1QHq8AdIKTkU7x87Xr-E0yVmObA,24
19
22
  sfi/gittool/gittool.py,sha256=BBE6gm9qP1fAWLqKprmsf7bOFgDvBvia8_bMaXc7dR4,11960
23
+ sfi/img2pdf/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
+ sfi/img2pdf/img2pdf.py,sha256=rR6f5bMg-HoKMvSyu2rWfDbx0kmo6F6e1dg5z3710Wo,15129
20
25
  sfi/llmclient/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
- sfi/llmclient/llmclient.py,sha256=SnFZ9c2cNvFeLeobJV1ls7Ewftaam4s-HVBYW2tgHPo,21706
26
+ sfi/llmclient/llmclient.py,sha256=zvaT-HEiL3CM3uEpvzuseLPEqFQe6RO4_fhnA2djHo0,22681
22
27
  sfi/llmquantize/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
- sfi/llmquantize/llmquantize.py,sha256=ILmfdJg7Rc7xAygfcVgkSKJ_qRAHDRZXjBymYFBy6fg,17693
24
- sfi/llmserver/llmserver.py,sha256=vYEcNOV-OEvDULpzzCAJ0zHrXgqJFolOhqNdCZU0Bjs,11339
28
+ sfi/llmquantize/llmquantize.py,sha256=N4h0RwdpVZdZM3qDWbL34hLGpQ3XuPkP_F8kyhhM8ZI,18855
29
+ sfi/llmserver/__init__.py,sha256=a99mtb8qROZYvqLuhmlasVCgbmAL9nzVzOJFrVSWLGE,3
30
+ sfi/llmserver/llmserver.py,sha256=Fm4Go7wif4xMGomMFDsyJnYMafXsWemGkr-VfaeYa6w,13530
25
31
  sfi/makepython/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
- sfi/makepython/makepython.py,sha256=87lySTg0j1lZNIJMf8U_Go_fkuLkuwGDUf6LUbR_r6c,11445
32
+ sfi/makepython/makepython.py,sha256=srinUE1Yr6zF-NjiUFVC1sUrpy8fYpDnCs7p648jWqc,23278
27
33
  sfi/pdfsplit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
34
  sfi/pdfsplit/pdfsplit.py,sha256=QWtW3GU28U2ZOyN5sCbH7jEMBpNbuAIzjXWOAXXW44M,6209
29
- sfi/pyarchive/pyarchive.py,sha256=1rkWY96U_DWbgTvdFGZto7dfutfhUo-OxmoVoaTo6WU,12892
35
+ sfi/pyarchive/__init__.py,sha256=a99mtb8qROZYvqLuhmlasVCgbmAL9nzVzOJFrVSWLGE,3
36
+ sfi/pyarchive/pyarchive.py,sha256=OnPbIRA0C9JdeyNsVZ6rJg7ExItKyJz4jVw5W4c92DA,38293
30
37
  sfi/pyembedinstall/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
31
- sfi/pyembedinstall/pyembedinstall.py,sha256=kxp5YuwNHB29AVBMEJvzaIqTc7bEx-oBpKReGRJ1Pyw,23737
38
+ sfi/pyembedinstall/pyembedinstall.py,sha256=LHnuvr63DXuntdS6a_7uQynOfarK-30WBUerSzawSHE,24171
32
39
  sfi/pylibpack/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
- sfi/pylibpack/pylibpack.py,sha256=lcGrzijibFFaJnxL8ZVALAGNHGs3g7-N4DO_AuiKwPs,54436
40
+ sfi/pylibpack/pylibpack.py,sha256=qK6J2_0VLMWQsKjcZ5njsvfqCnMRmGx8RweH2olhWTo,57818
34
41
  sfi/pylibpack/rules/numpy.json,sha256=ee4gA5NBudFi3MaJA-QlBKQwiQAUb-eluF8HNVkl7Vk,384
35
42
  sfi/pylibpack/rules/pymupdf.json,sha256=Hkzh8dvXKCzKx4aeHbu5E0qwgfbwQxZH2VLtQZzlMO4,153
36
43
  sfi/pylibpack/rules/pyqt5.json,sha256=JKGnVSUMfXGR5XK1sbL1F6cAsEhl7hK12QkrulAB00M,374
@@ -38,25 +45,26 @@ sfi/pylibpack/rules/pyside2.json,sha256=uSSteT-3wDohWwQ36Z5mSOaSbxrR4565In4uZj_e
38
45
  sfi/pylibpack/rules/scipy.json,sha256=vTSi3W5BGWcwMkaDnyD6Yg7ijZdicPEUMw4fnRTnNf4,468
39
46
  sfi/pylibpack/rules/shiboken2.json,sha256=9Pl3eslvergyjlyHNknkyN0oZlcH3049WULe5WjsmKM,515
40
47
  sfi/pyloadergen/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
41
- sfi/pyloadergen/pyloadergen.py,sha256=R2E6YBCUwfgT3SLr7paBBYEcuySLaj1q_CTZC2slwWQ,39741
48
+ sfi/pyloadergen/pyloadergen.py,sha256=VWJzc0opmMVthHE_RGbWeLe-DBaMn94gZo2yYLkf8cI,45696
42
49
  sfi/pypack/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
43
- sfi/pypack/pypack.py,sha256=-l3jc4akSSlgEmwiB-kITP0ioBBy42-taHkEsGNEQNw,35168
50
+ sfi/pypack/pypack.py,sha256=3LTCZMk8TqYhJbGv9AMLbe_Vi6bV7-cQUuHrWWO7QZU,22385
44
51
  sfi/pyprojectparse/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
45
- sfi/pyprojectparse/pyprojectparse.py,sha256=MLDuQm5LFZW-TQ_GfaaeFSa18lsQq5u2ZTjnlkFQ_Ao,19112
46
- sfi/pysourcepack/pysourcepack.py,sha256=qjBCFnY_3S7xwPgQ2GB0dr0WFbEj3uusZQ_udiU0Bok,9452
52
+ sfi/pyprojectparse/pyprojectparse.py,sha256=pHuwVCpVUlRoC9pRo3r6d0DfqqoEbsREsUuYjnkhqhU,30575
53
+ sfi/pysourcepack/__init__.py,sha256=a99mtb8qROZYvqLuhmlasVCgbmAL9nzVzOJFrVSWLGE,3
54
+ sfi/pysourcepack/pysourcepack.py,sha256=5_KrI2Y1TKKcoYfsFpTNXWguj6n8CKdca8lgoBCsL8k,12160
47
55
  sfi/quizbase/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
56
  sfi/quizbase/quizbase.py,sha256=3tPUuYexZ9TVsNPPO_Itmr5OvyHSgY5OSUZwPoQt9zg,30605
49
- sfi/quizbase/quizbase_gui.py,sha256=7prc5tWkbUPzs1ofNc4xIC_aRrMCWB6RYN_NTq70p0Q,34729
57
+ sfi/quizbase/quizbase_gui.py,sha256=m_Lj3au1a8gEv5x7KOTjomiP1NpXHUgHSPE4lLv63hY,34733
50
58
  sfi/regexvalidate/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
51
59
  sfi/regexvalidate/regex_help.html,sha256=3ltx3nh-Y5kkbHy5D67KfWtLig3u5XEhIlPHdHLEuTE,12436
52
60
  sfi/regexvalidate/regexvalidate.py,sha256=5C_M2EKt9Jlonq03v9zrqtsFfAKK3D1vF1kBxD6iUpE,18600
53
61
  sfi/taskkill/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
54
- sfi/taskkill/taskkill.py,sha256=kRacCP78mDsZk44tfm4qblOplPxQuo3_6lHl6UQEmkU,7744
62
+ sfi/taskkill/taskkill.py,sha256=wM9g8sWJVTy4GxXe26rKdax2lIBI-uH9wP5wRenriH4,11606
55
63
  sfi/which/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
56
- sfi/which/which.py,sha256=zVIAwZA-pGGngxkkwZ6IxDX3ozVHg7cLSYwYO9FjaIc,2439
64
+ sfi/which/which.py,sha256=2YbGgSiT1ySapKVV1ESoPf4P-JU8vvzmsZY39NiVr6k,2596
57
65
  sfi/workflowengine/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
58
- sfi/workflowengine/workflowengine.py,sha256=ck5PjyyjtWtbjN4ePEKsTWV6QR-BUlrfwrY6jih52jQ,17055
59
- pysfi-0.1.12.dist-info/METADATA,sha256=ahFnr70NGB0JnR_EHBiVbzFt6wLgxaY5ZAvuP8A8bCo,4198
60
- pysfi-0.1.12.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
61
- pysfi-0.1.12.dist-info/entry_points.txt,sha256=HwFhwv46r2HgTfGgV0Rvhv7p84XXg9C3tVRiUcA4_sE,1134
62
- pysfi-0.1.12.dist-info/RECORD,,
66
+ sfi/workflowengine/workflowengine.py,sha256=pPRsxWB2ZoDwcVTjsDlpiml-xZYiZBKjLcINu4TGBcE,19209
67
+ pysfi-0.1.13.dist-info/METADATA,sha256=6MAsufstxqnCpDvLj0O0xA6ZjTMvMAhwlccsrvu9uT4,4198
68
+ pysfi-0.1.13.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
69
+ pysfi-0.1.13.dist-info/entry_points.txt,sha256=ju_Bwp3L8-5Bpcj0PSCCDL8vGsGb4ZYpjfzprSdFrfA,1215
70
+ pysfi-0.1.13.dist-info/RECORD,,
@@ -8,6 +8,7 @@ docscan = sfi.docscan.docscan:main
8
8
  docscan-gui = sfi.docscan.docscan_gui:main
9
9
  filedate = sfi.filedate.filedate:main
10
10
  gitt = sfi.gittool.gittool:main
11
+ img2pdf = sfi.img2pdf.img2pdf:main
11
12
  llmcli = sfi.llmclient.llmclient:main
12
13
  llmqnt = sfi.llmquantize.llmquantize:main
13
14
  llmsvr = sfi.llmserver.llmserver:main
@@ -19,6 +20,7 @@ pylibpack = sfi.pylibpack.pylibpack:main
19
20
  pyloadergen = sfi.pyloadergen.pyloadergen:main
20
21
  pyp = sfi.pypack.pypack:main
21
22
  pypack = sfi.pypack.pypack:main
23
+ pypp = sfi.pyprojectparse.pyprojectparse:main
22
24
  pyprojectparse = sfi.pyprojectparse.pyprojectparse:main
23
25
  pysourcepack = sfi.pysourcepack.pysourcepack:main
24
26
  quizbase = sfi.quizbase.quizbase:main
sfi/__init__.py CHANGED
@@ -1,3 +1,5 @@
1
- """Single File commands for Interactive python."""
2
-
3
- __version__ = "0.1.12"
1
+ """Single File commands for Interactive python."""
2
+
3
+ from __future__ import annotations
4
+
5
+ __version__ = "0.1.13"
@@ -0,0 +1,3 @@
1
+ """Alarm clock module for pysfi."""
2
+
3
+ from __future__ import annotations
@@ -1,6 +1,5 @@
1
1
  from __future__ import annotations
2
2
 
3
- import argparse
4
3
  import logging
5
4
  import random
6
5
  import sys
@@ -8,7 +7,6 @@ from dataclasses import dataclass
8
7
  from datetime import datetime, timedelta, timezone
9
8
  from functools import partial
10
9
 
11
- import qdarkstyle
12
10
  from PySide2.QtCore import QSize, Qt, QTime, QTimer
13
11
  from PySide2.QtGui import QCloseEvent
14
12
  from PySide2.QtWidgets import (
@@ -28,7 +26,7 @@ __version__ = "0.1.3"
28
26
  __build_date__ = "2026-01-22"
29
27
 
30
28
 
31
- @dataclass(frozen=True)
29
+ @dataclass
32
30
  class AlarmClockConfig:
33
31
  """Configuration for the alarm clock application."""
34
32
 
@@ -87,9 +85,9 @@ class DigitalClock(QLabel):
87
85
  logger.debug(f"Updated time: {current}")
88
86
 
89
87
  # Add blink effect
90
- self._color = random.choice(
91
- [_ for _ in config.DIGITAL_BORDER_COLORS if _ != self._color],
92
- )
88
+ self._color = random.choice([
89
+ c for c in config.DIGITAL_BORDER_COLORS if c != self._color
90
+ ])
93
91
  self.setStyleSheet(f"""
94
92
  font: {config.DIGITAL_FONT};
95
93
  color: {config.DIGITAL_COLOR};
@@ -112,6 +110,7 @@ class BlinkDialog(QDialog):
112
110
  self.windowFlags() | Qt.WindowStaysOnTopHint | Qt.WindowType.Dialog,
113
111
  )
114
112
  self.setFixedSize(QSize(400, 240))
113
+ self.setWindowFlag(Qt.WindowCloseButtonHint, False)
115
114
 
116
115
  layout = QVBoxLayout()
117
116
  msg_label = QLabel(config.BLINK_CONTENT)
@@ -122,32 +121,28 @@ class BlinkDialog(QDialog):
122
121
  msg_label.setAlignment(Qt.AlignmentFlag.AlignCenter)
123
122
 
124
123
  close_button = QPushButton("Close Alarm")
125
- close_button.clicked.connect(self.accept)
124
+ close_button.clicked.connect(self.close_alarm)
126
125
 
127
126
  layout.addWidget(msg_label)
128
127
  layout.addWidget(close_button)
129
128
  self.setLayout(layout)
130
129
 
131
- # Prevent user from closing dialog by other means, ensure button click only
132
- self.setWindowFlag(Qt.WindowCloseButtonHint, False)
133
-
134
130
  # Blink control variables and timer
135
131
  self.blink_timer = QTimer(self)
136
132
  self.blink_timer.timeout.connect(self.update_blink)
137
133
  self.blink_state = False
138
134
  self.blink_type = config.BLINK_TYPE
139
-
140
- # Initialize style
141
135
  self.bg_color = random.choice(config.BLINK_BG_COLORS)
142
- self.origin_style = self.styleSheet()
143
136
  self.blink_timer.start(config.BLINK_INTERVAL)
144
137
 
145
138
  def update_blink(self) -> None:
146
139
  """Timer timeout, update blink state."""
147
140
  if self.blink_type == "color":
148
141
  # Color blink logic
149
- colors = [_ for _ in config.BLINK_BG_COLORS[:] if _ != self.bg_color]
150
- self.setStyleSheet(f"background-color: {random.choice(colors)}")
142
+ colors = [c for c in config.BLINK_BG_COLORS if c != self.bg_color]
143
+ new_color = random.choice(colors)
144
+ self.setStyleSheet(f"background-color: {new_color}")
145
+ self.bg_color = new_color
151
146
  elif self.blink_type == "opacity":
152
147
  # Opacity blink logic - Note: Some systems may not fully support window opacity
153
148
  new_opacity = 0.3 if self.blink_state else 1.0
@@ -155,10 +150,14 @@ class BlinkDialog(QDialog):
155
150
 
156
151
  self.blink_state = not self.blink_state # Toggle state
157
152
 
153
+ def close_alarm(self) -> None:
154
+ """Close alarm dialog and stop blinking."""
155
+ self.stop_blinking()
156
+ self.accept()
157
+
158
158
  def stop_blinking(self) -> None:
159
- """Stop blinking, restore original style."""
159
+ """Stop blinking."""
160
160
  self.blink_timer.stop()
161
- self.setStyleSheet(self.origin_style) # Restore original style
162
161
  self.setWindowOpacity(1.0) # Ensure opacity is restored
163
162
 
164
163
  def closeEvent(self, event: QCloseEvent) -> None: # noqa: N802
@@ -173,13 +172,6 @@ class AlarmClock(QMainWindow):
173
172
  def __init__(self) -> None:
174
173
  super().__init__()
175
174
  self.setWindowTitle(f"{config.ALARM_CLOCK_TITLE} v{__version__}")
176
- self.setGeometry(
177
- QApplication.desktop().screenGeometry().center().x() - self.width() // 4,
178
- QApplication.desktop().screenGeometry().center().y() - self.height() // 2,
179
- self.width(),
180
- self.height(),
181
- )
182
- self.adjustSize()
183
175
 
184
176
  # Set window style
185
177
  self.setStyleSheet("""
@@ -277,6 +269,13 @@ class AlarmClock(QMainWindow):
277
269
  self.status_label.setStyleSheet("color: #aaaaaa; font-size: 16px;")
278
270
  main_layout.addWidget(self.status_label)
279
271
 
272
+ # Center window on screen
273
+ self.adjustSize()
274
+ screen = QApplication.desktop().screenGeometry()
275
+ x = (screen.width() - self.width()) // 2
276
+ y = (screen.height() - self.height()) // 2
277
+ self.move(x, y)
278
+
280
279
  # Alarm timer
281
280
  self.alarm_timer = QTimer()
282
281
  self.alarm_timer.timeout.connect(self.check_alarm)
@@ -330,11 +329,6 @@ class AlarmClock(QMainWindow):
330
329
  dialog.exec_()
331
330
 
332
331
  self.status_label.setText("⏰ Alarm Rang! ⏰")
333
- self.status_label.setStyleSheet(
334
- "color: #ff5555; font-size: 18px; font-weight: bold;",
335
- )
336
-
337
- # Add blink effect
338
332
  self.status_label.setStyleSheet("""
339
333
  color: #ff0000;
340
334
  font-size: 18px;
@@ -350,18 +344,7 @@ class AlarmClock(QMainWindow):
350
344
 
351
345
 
352
346
  def main() -> None:
353
- parser = argparse.ArgumentParser(
354
- prog="alarmclock", description="Digital Alarm Clock"
355
- )
356
- parser.add_argument("-d", "--debug", action="store_true", help="Enable debug mode")
357
- parser.add_argument("-v", "--version", action="version", version=f"{__version__}")
358
-
359
- args = parser.parse_args()
360
- if args.debug:
361
- logger.setLevel(logging.DEBUG)
362
-
363
347
  app = QApplication(sys.argv)
364
- app.setStyleSheet(qdarkstyle.load_stylesheet_pyside2())
365
348
  window = AlarmClock()
366
349
  window.show()
367
350
  sys.exit(app.exec_())
@@ -1,3 +1,5 @@
1
- """Bumpversion - Automated version number management tool."""
2
-
3
- __version__ = "0.1.12"
1
+ """Bumpversion - Automated version number management tool."""
2
+
3
+ from __future__ import annotations
4
+
5
+ __version__ = "0.1.13"
@@ -0,0 +1,3 @@
1
+ """Cleanbuild - Clean build artifacts and temporary files."""
2
+
3
+ from __future__ import annotations
sfi/cli.py CHANGED
@@ -1,11 +1,21 @@
1
+ from __future__ import annotations
2
+
1
3
  import argparse
2
4
 
3
5
  from sfi import __version__ as VERSION # noqa: N812
4
6
 
5
7
 
6
- def main():
8
+ def main() -> None:
9
+ """Main entry point for the pysfi CLI tool.
10
+
11
+ Parses command line arguments and handles version printing.
12
+ """
7
13
  parser = argparse.ArgumentParser()
8
14
  parser.add_argument(
9
- "-v", "--version", action="version", version=f"%(prog)s v{VERSION}", help="Print version and exit"
15
+ "-v",
16
+ "--version",
17
+ action="version",
18
+ version=f"%(prog)s v{VERSION}",
19
+ help="Print version and exit",
10
20
  )
11
21
  parser.parse_args()
@@ -0,0 +1 @@
1
+
@@ -0,0 +1 @@
1
+
sfi/docdiff/docdiff.py CHANGED
@@ -12,7 +12,7 @@ from functools import cached_property
12
12
  from pathlib import Path
13
13
  from typing import Any
14
14
 
15
- CONFIG_FILE = Path.home() / ".sfi" / "docdiff.json"
15
+ CONFIG_FILE = Path.home() / ".pysfi" / "docdiff.json"
16
16
 
17
17
  logging.basicConfig(level=logging.INFO, format="%(message)s")
18
18
  logger = logging.getLogger(__name__)
sfi/docscan/__init__.py CHANGED
@@ -1,3 +1,3 @@
1
- """Document scanner module for scanning and extracting content from various document formats."""
2
-
3
- __version__ = "0.1.12"
1
+ """Document scanner module for scanning and extracting content from various document formats."""
2
+
3
+ __version__ = "0.1.13"