pysfi 0.1.6__tar.gz → 0.1.7__tar.gz

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.
Files changed (44) hide show
  1. {pysfi-0.1.6 → pysfi-0.1.7}/PKG-INFO +24 -1
  2. {pysfi-0.1.6 → pysfi-0.1.7}/pyproject.toml +137 -132
  3. {pysfi-0.1.6 → pysfi-0.1.7}/sfi/__init__.py +1 -1
  4. {pysfi-0.1.6 → pysfi-0.1.7}/sfi/bumpversion/__init__.py +1 -1
  5. pysfi-0.1.7/sfi/cli.py +11 -0
  6. pysfi-0.1.7/sfi/docscan/README.md +813 -0
  7. pysfi-0.1.7/sfi/docscan/__init__.py +3 -0
  8. pysfi-0.1.7/sfi/docscan/docscan.py +841 -0
  9. pysfi-0.1.7/sfi/docscan/docscan_gui.py +596 -0
  10. pysfi-0.1.7/sfi/docscan/tests/__init__.py +1 -0
  11. pysfi-0.1.7/sfi/docscan/tests/test_benchmark.py +362 -0
  12. pysfi-0.1.7/sfi/docscan/tests/test_docscan.py +457 -0
  13. pysfi-0.1.7/sfi/docscan/tests/test_enhanced.py +267 -0
  14. {pysfi-0.1.6 → pysfi-0.1.7}/sfi/makepython/makepython.py +30 -14
  15. pysfi-0.1.7/sfi/projectparse/__init__.py +0 -0
  16. pysfi-0.1.7/sfi/pyloadergen/__init__.py +0 -0
  17. pysfi-0.1.7/sfi/pyloadergen/tests/__init__.py +0 -0
  18. pysfi-0.1.7/sfi/pypacker/__init__.py +0 -0
  19. pysfi-0.1.7/sfi/taskkill/__init__.py +0 -0
  20. pysfi-0.1.7/sfi/which/__init__.py +0 -0
  21. {pysfi-0.1.6 → pysfi-0.1.7}/.gitignore +0 -0
  22. {pysfi-0.1.6 → pysfi-0.1.7}/README.md +0 -0
  23. {pysfi-0.1.6 → pysfi-0.1.7}/sfi/alarmclock/__init__.py +0 -0
  24. {pysfi-0.1.6 → pysfi-0.1.7}/sfi/alarmclock/alarmclock.py +0 -0
  25. {pysfi-0.1.6 → pysfi-0.1.7}/sfi/bumpversion/README.md +0 -0
  26. {pysfi-0.1.6 → pysfi-0.1.7}/sfi/bumpversion/bumpversion.py +0 -0
  27. {pysfi-0.1.6 → pysfi-0.1.7}/sfi/bumpversion/tests/__init__.py +0 -0
  28. {pysfi-0.1.6 → pysfi-0.1.7}/sfi/bumpversion/tests/test_bumpversion.py +0 -0
  29. {pysfi-0.1.6/sfi/filedate → pysfi-0.1.7/sfi/embedinstall}/__init__.py +0 -0
  30. {pysfi-0.1.6 → pysfi-0.1.7}/sfi/embedinstall/embedinstall.py +0 -0
  31. {pysfi-0.1.6 → pysfi-0.1.7}/sfi/filedate/README.md +0 -0
  32. {pysfi-0.1.6/sfi/makepython → pysfi-0.1.7/sfi/filedate}/__init__.py +0 -0
  33. {pysfi-0.1.6 → pysfi-0.1.7}/sfi/filedate/filedate.py +0 -0
  34. {pysfi-0.1.6/sfi/pdfsplit/tests → pysfi-0.1.7/sfi/makepython}/__init__.py +0 -0
  35. {pysfi-0.1.6/sfi/pyloadergen → pysfi-0.1.7/sfi/pdfsplit}/__init__.py +0 -0
  36. {pysfi-0.1.6 → pysfi-0.1.7}/sfi/pdfsplit/pdfsplit.py +0 -0
  37. {pysfi-0.1.6/sfi/pyloadergen → pysfi-0.1.7/sfi/pdfsplit}/tests/__init__.py +0 -0
  38. {pysfi-0.1.6 → pysfi-0.1.7}/sfi/pdfsplit/tests/test_pdfsplit.py +0 -0
  39. {pysfi-0.1.6 → pysfi-0.1.7}/sfi/projectparse/projectparse.py +0 -0
  40. {pysfi-0.1.6 → pysfi-0.1.7}/sfi/pyloadergen/pyloadergen.py +0 -0
  41. {pysfi-0.1.6 → pysfi-0.1.7}/sfi/pyloadergen/tests/test_pyloadergen.py +0 -0
  42. {pysfi-0.1.6 → pysfi-0.1.7}/sfi/pypacker/fspacker.py +0 -0
  43. {pysfi-0.1.6 → pysfi-0.1.7}/sfi/taskkill/taskkill.py +0 -0
  44. {pysfi-0.1.6 → pysfi-0.1.7}/sfi/which/which.py +0 -0
@@ -1,13 +1,36 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pysfi
3
- Version: 0.1.6
3
+ Version: 0.1.7
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'
7
7
  Provides-Extra: all
8
+ Requires-Dist: ebooklib>=0.18; extra == 'all'
9
+ Requires-Dist: markdown>=3.5; extra == 'all'
10
+ Requires-Dist: odfpy>=1.4.1; extra == 'all'
11
+ Requires-Dist: openpyxl>=3.1.0; extra == 'all'
12
+ Requires-Dist: pillow>=10.0.0; extra == 'all'
8
13
  Requires-Dist: pymupdf>=1.24.11; extra == 'all'
14
+ Requires-Dist: pypdf>=3.0.0; extra == 'all'
15
+ Requires-Dist: pyside2>=5.15.2.1; extra == 'all'
16
+ Requires-Dist: pytesseract>=0.3.10; extra == 'all'
17
+ Requires-Dist: python-docx>=1.1.0; extra == 'all'
18
+ Requires-Dist: python-pptx>=0.6.21; extra == 'all'
19
+ Provides-Extra: extra
20
+ Requires-Dist: ebooklib>=0.18; extra == 'extra'
21
+ Requires-Dist: markdown>=3.5; extra == 'extra'
22
+ Requires-Dist: odfpy>=1.4.1; extra == 'extra'
23
+ Requires-Dist: pypdf>=3.0.0; extra == 'extra'
24
+ Provides-Extra: gui
25
+ Requires-Dist: pyside2>=5.15.2.1; extra == 'gui'
26
+ Provides-Extra: ocr
27
+ Requires-Dist: pillow>=10.0.0; extra == 'ocr'
28
+ Requires-Dist: pytesseract>=0.3.10; extra == 'ocr'
9
29
  Provides-Extra: office
30
+ Requires-Dist: openpyxl>=3.1.0; extra == 'office'
10
31
  Requires-Dist: pymupdf>=1.24.11; extra == 'office'
32
+ Requires-Dist: python-docx>=1.1.0; extra == 'office'
33
+ Requires-Dist: python-pptx>=0.6.21; extra == 'office'
11
34
  Description-Content-Type: text/markdown
12
35
 
13
36
  # pysfi
@@ -1,132 +1,137 @@
1
- [build-system]
2
- build-backend = "hatchling.build"
3
- requires = ["hatchling"]
4
-
5
- [project]
6
- dependencies = ["tomli>=2.4.0; python_version<'3.11'"]
7
- description = "Single File commands for Interactive python."
8
- name = "pysfi"
9
- readme = "README.md"
10
- requires-python = ">=3.8"
11
- version = "0.1.6"
12
-
13
- [project.scripts]
14
- alarmclk = "sfi.alarmclock.alarmclock:main"
15
- bumpversion = "sfi.bumpversion.bumpversion:main"
16
- embedinstall = "sfi.embedinstall.embedinstall:main"
17
- filedate = "sfi.filedate.filedate:main"
18
- mkp = "sfi.makepython.makepython:main"
19
- pdfsplit = "sfi.pdfsplit.pdfsplit:main"
20
- projectparse = "sfi.projectparse.projectparse:main"
21
- pyloadergen = "sfi.pyloadergen.pyloadergen:main"
22
- pypacker = "sfi.pypacker.pypacker:main"
23
- taskk = "sfi.taskkill.taskkill:main"
24
- wch = "sfi.which.which:main"
25
-
26
- [project.optional-dependencies]
27
- all = ["pysfi[office]"]
28
- office = ["pymupdf>=1.24.11"]
29
-
30
- [tool.hatch.build.targets.wheel]
31
- exclude = [
32
- "sfi/*/README.md",
33
- "sfi/*/dist",
34
- "sfi/*/pyproject.toml",
35
- "sfi/*/tests",
36
- ]
37
- packages = ["sfi"]
38
-
39
- # Only include necessary source files to minimize package size
40
- [tool.hatch.build]
41
- include = ["README.md", "sfi/**/*.py", "sfi/pyproject.toml"]
42
-
43
- [tool.ruff]
44
- line-length = 120
45
- target-version = "py38"
46
-
47
- # Exclude files and directories
48
- exclude = [
49
- ".bzr",
50
- ".direnv",
51
- ".eggs",
52
- ".git",
53
- ".git-rewrite",
54
- ".hg",
55
- ".mypy_cache",
56
- ".nox",
57
- ".pants.d",
58
- ".pytype",
59
- ".ruff_cache",
60
- ".svn",
61
- ".tox",
62
- ".venv",
63
- "__pypackages__",
64
- "_build",
65
- "buck-out",
66
- "build",
67
- "dist",
68
- "node_modules",
69
- "venv",
70
- ]
71
-
72
- [tool.ruff.lint]
73
- dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$"
74
- fixable = ["ALL"]
75
- ignore = [
76
- "B008", # Do not perform function calls in function arguments
77
- "E501", # Line too long (handled by formatter)
78
- ]
79
- select = [
80
- "B", # flake8-bugbear
81
- "C4", # flake8-comprehensions
82
- "E", # pycodestyle errors
83
- "F", # Pyflakes
84
- "I", # isort
85
- "N", # pep8-naming
86
- "RUF", # Ruff-specific rules
87
- "SIM", # flake8-simplify
88
- "UP", # pyupgrade
89
- "W", # pycodestyle warnings
90
- ]
91
- unfixable = []
92
-
93
- [tool.ruff.lint.isort]
94
- known-first-party = ["sfi"]
95
-
96
- [tool.ruff.lint.per-file-ignores]
97
- "__init__.py" = ["F401"] # Allow unused imports
98
-
99
- [tool.uv.workspace]
100
- members = [
101
- "sfi/alarmclock",
102
- "sfi/bumpversion",
103
- "sfi/embedinstall",
104
- "sfi/filedate",
105
- "sfi/makepython",
106
- "sfi/pdfsplit",
107
- "sfi/projectparse",
108
- "sfi/pyloadergen",
109
- "sfi/pypacker",
110
- "sfi/taskkill",
111
- "sfi/which",
112
- ]
113
-
114
- [dependency-groups]
115
- dev = [
116
- "hatch>=1.14.2",
117
- "pysfi[all]",
118
- "pyside2>=5.15.2.1",
119
- "pytest-cov>=5.0.0",
120
- "pytest>=8.3.5",
121
- "qdarkstyle>=3.2.3",
122
- "ruff>=0.14.11",
123
- "tomli>=2.4.0",
124
- ]
125
-
126
- [tool.pytest.ini_options]
127
- addopts = "-v --tb=short"
128
- python_classes = ["Test*"]
129
- python_files = ["test_*.py"]
130
- python_functions = ["test_*"]
131
- pythonpath = ["."]
132
- testpaths = ["sfi"]
1
+ [build-system]
2
+ build-backend = "hatchling.build"
3
+ requires = ["hatchling"]
4
+
5
+ [project]
6
+ dependencies = ["tomli>=2.4.0; python_version<'3.11'"]
7
+ description = "Single File commands for Interactive python."
8
+ name = "pysfi"
9
+ readme = "README.md"
10
+ requires-python = ">=3.8"
11
+ version = "0.1.7"
12
+
13
+ [project.scripts]
14
+ alarmclk = "sfi.alarmclock.alarmclock:main"
15
+ bumpversion = "sfi.bumpversion.bumpversion:main"
16
+ docscan = "sfi.docscan.docscan:main"
17
+ docscan-gui = "sfi.docscan.docscan_gui:main"
18
+ embedinstall = "sfi.embedinstall.embedinstall:main"
19
+ filedate = "sfi.filedate.filedate:main"
20
+ mkp = "sfi.makepython.makepython:main"
21
+ pdfsplit = "sfi.pdfsplit.pdfsplit:main"
22
+ projectparse = "sfi.projectparse.projectparse:main"
23
+ pyloadergen = "sfi.pyloadergen.pyloadergen:main"
24
+ pypacker = "sfi.pypacker.pypacker:main"
25
+ sfi = "sfi.cli:main"
26
+ taskk = "sfi.taskkill.taskkill:main"
27
+ wch = "sfi.which.which:main"
28
+
29
+ [project.optional-dependencies]
30
+ all = ["pysfi[gui,office,ocr,extra]"]
31
+ extra = ["ebooklib>=0.18", "markdown>=3.5", "odfpy>=1.4.1", "pypdf>=3.0.0"]
32
+ gui = ["PySide2>=5.15.2.1"]
33
+ ocr = ["Pillow>=10.0.0", "pytesseract>=0.3.10"]
34
+ office = [
35
+ "openpyxl>=3.1.0",
36
+ "pymupdf>=1.24.11",
37
+ "python-docx>=1.1.0",
38
+ "python-pptx>=0.6.21",
39
+ ]
40
+
41
+ [tool.hatch.build.targets.wheel]
42
+ exclude = [
43
+ "sfi/*/README.md",
44
+ "sfi/*/dist",
45
+ "sfi/*/pyproject.toml",
46
+ "sfi/*/tests",
47
+ ]
48
+ packages = ["sfi"]
49
+
50
+ # Only include necessary source files to minimize package size
51
+ [tool.hatch.build]
52
+ include = ["README.md", "sfi/**/*.py", "sfi/pyproject.toml"]
53
+
54
+ [tool.ruff]
55
+ line-length = 120
56
+ target-version = "py38"
57
+
58
+ # Exclude files and directories
59
+ exclude = [
60
+ ".bzr",
61
+ ".direnv",
62
+ ".eggs",
63
+ ".git",
64
+ ".git-rewrite",
65
+ ".hg",
66
+ ".mypy_cache",
67
+ ".nox",
68
+ ".pants.d",
69
+ ".pytype",
70
+ ".ruff_cache",
71
+ ".svn",
72
+ ".tox",
73
+ ".venv",
74
+ "__pypackages__",
75
+ "_build",
76
+ "buck-out",
77
+ "build",
78
+ "dist",
79
+ "node_modules",
80
+ "venv",
81
+ ]
82
+
83
+ [tool.ruff.lint]
84
+ dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$"
85
+ fixable = ["ALL"]
86
+ ignore = [
87
+ "B008", # Do not perform function calls in function arguments
88
+ "E501", # Line too long (handled by formatter)
89
+ ]
90
+ select = [
91
+ "B", # flake8-bugbear
92
+ "C4", # flake8-comprehensions
93
+ "E", # pycodestyle errors
94
+ "F", # Pyflakes
95
+ "I", # isort
96
+ "N", # pep8-naming
97
+ "RUF", # Ruff-specific rules
98
+ "SIM", # flake8-simplify
99
+ "UP", # pyupgrade
100
+ "W", # pycodestyle warnings
101
+ ]
102
+ unfixable = []
103
+
104
+ [tool.ruff.lint.isort]
105
+ known-first-party = ["sfi"]
106
+
107
+ [tool.ruff.lint.per-file-ignores]
108
+ "__init__.py" = ["F401"] # Allow unused imports
109
+
110
+ [tool.uv.workspace]
111
+ members = [
112
+ "sfi/alarmclock",
113
+ "sfi/bumpversion",
114
+ "sfi/docscan",
115
+ "sfi/embedinstall",
116
+ "sfi/filedate",
117
+ "sfi/makepython",
118
+ "sfi/pdfsplit",
119
+ "sfi/projectparse",
120
+ "sfi/pyloadergen",
121
+ "sfi/pypacker",
122
+ "sfi/taskkill",
123
+ "sfi/which",
124
+ ]
125
+
126
+ [dependency-groups]
127
+ dev = [
128
+ "hatch>=1.14.2",
129
+ "pysfi[all]",
130
+ "pyside2>=5.15.2.1",
131
+ "pytest-benchmark>=4.0.0",
132
+ "pytest-cov>=5.0.0",
133
+ "pytest>=8.3.5",
134
+ "qdarkstyle>=3.2.3",
135
+ "ruff>=0.14.11",
136
+ "tomli>=2.4.0",
137
+ ]
@@ -1,3 +1,3 @@
1
1
  """Single File commands for Interactive python."""
2
2
 
3
- __version__ = "0.1.6"
3
+ __version__ = "0.1.7"
@@ -1,3 +1,3 @@
1
1
  """Bumpversion - Automated version number management tool."""
2
2
 
3
- __version__ = "0.1.6"
3
+ __version__ = "0.1.7"
pysfi-0.1.7/sfi/cli.py ADDED
@@ -0,0 +1,11 @@
1
+ import argparse
2
+
3
+ from sfi import __version__ as VERSION # noqa: N812
4
+
5
+
6
+ def main():
7
+ parser = argparse.ArgumentParser()
8
+ parser.add_argument(
9
+ "-v", "--version", action="version", version=f"%(prog)s v{VERSION}", help="Print version and exit"
10
+ )
11
+ parser.parse_args()