pysfi 0.1.7__tar.gz → 0.1.10__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 (66) hide show
  1. {pysfi-0.1.7 → pysfi-0.1.10}/PKG-INFO +5 -3
  2. {pysfi-0.1.7 → pysfi-0.1.10}/README.md +99 -99
  3. pysfi-0.1.10/examples/pack_demo/README.md +77 -0
  4. {pysfi-0.1.7 → pysfi-0.1.10}/pyproject.toml +148 -137
  5. {pysfi-0.1.7 → pysfi-0.1.10}/sfi/__init__.py +1 -1
  6. {pysfi-0.1.7 → pysfi-0.1.10}/sfi/bumpversion/__init__.py +1 -1
  7. {pysfi-0.1.7 → pysfi-0.1.10}/sfi/docscan/__init__.py +1 -1
  8. {pysfi-0.1.7 → pysfi-0.1.10}/sfi/docscan/docscan.py +407 -103
  9. pysfi-0.1.10/sfi/docscan/docscan_gui.py +1282 -0
  10. pysfi-0.1.10/sfi/docscan/lang/eng.py +152 -0
  11. pysfi-0.1.10/sfi/docscan/lang/zhcn.py +170 -0
  12. {pysfi-0.1.7 → pysfi-0.1.10}/sfi/docscan/tests/test_benchmark.py +209 -144
  13. pysfi-0.1.10/sfi/docscan/tests/test_docscan.py +1245 -0
  14. {pysfi-0.1.7 → pysfi-0.1.10}/sfi/embedinstall/embedinstall.py +77 -17
  15. {pysfi-0.1.7 → pysfi-0.1.10}/sfi/makepython/makepython.py +29 -28
  16. {pysfi-0.1.7 → pysfi-0.1.10}/sfi/pdfsplit/pdfsplit.py +173 -173
  17. pysfi-0.1.10/sfi/pylibpack/README.md +102 -0
  18. pysfi-0.1.10/sfi/pylibpack/pylibpack.py +913 -0
  19. {pysfi-0.1.7 → pysfi-0.1.10}/sfi/pyloadergen/pyloadergen.py +697 -111
  20. pysfi-0.1.10/sfi/pyloadergen/tests/test_benchmark.py +235 -0
  21. {pysfi-0.1.7 → pysfi-0.1.10}/sfi/pyloadergen/tests/test_pyloadergen.py +211 -36
  22. pysfi-0.1.10/sfi/pypack/README.md +292 -0
  23. pysfi-0.1.10/sfi/pypack/pypack.py +791 -0
  24. pysfi-0.1.10/sfi/pypack/tests/__init__.py +0 -0
  25. pysfi-0.1.10/sfi/pypack/tests/test_pack.py +257 -0
  26. pysfi-0.1.10/sfi/pysourcepack/README.md +201 -0
  27. pysfi-0.1.10/sfi/pysourcepack/pysourcepack.py +369 -0
  28. pysfi-0.1.10/sfi/taskkill/__init__.py +0 -0
  29. pysfi-0.1.10/sfi/which/__init__.py +0 -0
  30. pysfi-0.1.10/sfi/workflowengine/README.md +0 -0
  31. pysfi-0.1.10/sfi/workflowengine/__init__.py +0 -0
  32. pysfi-0.1.10/sfi/workflowengine/tests/__init__.py +1 -0
  33. pysfi-0.1.10/sfi/workflowengine/tests/test_benchmark.py +725 -0
  34. pysfi-0.1.10/sfi/workflowengine/tests/test_workflowengine.py +740 -0
  35. pysfi-0.1.10/sfi/workflowengine/workflowengine.py +444 -0
  36. pysfi-0.1.7/sfi/docscan/docscan_gui.py +0 -596
  37. pysfi-0.1.7/sfi/docscan/tests/test_docscan.py +0 -457
  38. pysfi-0.1.7/sfi/pypacker/fspacker.py +0 -91
  39. {pysfi-0.1.7 → pysfi-0.1.10}/.gitignore +0 -0
  40. {pysfi-0.1.7 → pysfi-0.1.10}/sfi/alarmclock/__init__.py +0 -0
  41. {pysfi-0.1.7 → pysfi-0.1.10}/sfi/alarmclock/alarmclock.py +0 -0
  42. {pysfi-0.1.7 → pysfi-0.1.10}/sfi/bumpversion/README.md +0 -0
  43. {pysfi-0.1.7 → pysfi-0.1.10}/sfi/bumpversion/bumpversion.py +0 -0
  44. {pysfi-0.1.7 → pysfi-0.1.10}/sfi/bumpversion/tests/__init__.py +0 -0
  45. {pysfi-0.1.7 → pysfi-0.1.10}/sfi/bumpversion/tests/test_bumpversion.py +0 -0
  46. {pysfi-0.1.7 → pysfi-0.1.10}/sfi/cli.py +0 -0
  47. {pysfi-0.1.7 → pysfi-0.1.10}/sfi/docscan/README.md +0 -0
  48. {pysfi-0.1.7/sfi/embedinstall → pysfi-0.1.10/sfi/docscan/lang}/__init__.py +0 -0
  49. {pysfi-0.1.7 → pysfi-0.1.10}/sfi/docscan/tests/__init__.py +0 -0
  50. {pysfi-0.1.7 → pysfi-0.1.10}/sfi/docscan/tests/test_enhanced.py +0 -0
  51. {pysfi-0.1.7/sfi/filedate → pysfi-0.1.10/sfi/embedinstall}/__init__.py +0 -0
  52. {pysfi-0.1.7 → pysfi-0.1.10}/sfi/filedate/README.md +0 -0
  53. {pysfi-0.1.7/sfi/makepython → pysfi-0.1.10/sfi/filedate}/__init__.py +0 -0
  54. {pysfi-0.1.7 → pysfi-0.1.10}/sfi/filedate/filedate.py +0 -0
  55. {pysfi-0.1.7/sfi/pdfsplit → pysfi-0.1.10/sfi/makepython}/__init__.py +0 -0
  56. {pysfi-0.1.7/sfi/pdfsplit/tests → pysfi-0.1.10/sfi/pdfsplit}/__init__.py +0 -0
  57. {pysfi-0.1.7/sfi/projectparse → pysfi-0.1.10/sfi/pdfsplit/tests}/__init__.py +0 -0
  58. {pysfi-0.1.7 → pysfi-0.1.10}/sfi/pdfsplit/tests/test_pdfsplit.py +0 -0
  59. {pysfi-0.1.7/sfi/pyloadergen → pysfi-0.1.10/sfi/projectparse}/__init__.py +0 -0
  60. {pysfi-0.1.7 → pysfi-0.1.10}/sfi/projectparse/projectparse.py +0 -0
  61. {pysfi-0.1.7/sfi/pyloadergen/tests → pysfi-0.1.10/sfi/pylibpack}/__init__.py +0 -0
  62. {pysfi-0.1.7/sfi/pypacker → pysfi-0.1.10/sfi/pyloadergen}/__init__.py +0 -0
  63. {pysfi-0.1.7/sfi/taskkill → pysfi-0.1.10/sfi/pyloadergen/tests}/__init__.py +0 -0
  64. {pysfi-0.1.7/sfi/which → pysfi-0.1.10/sfi/pypack}/__init__.py +0 -0
  65. {pysfi-0.1.7 → pysfi-0.1.10}/sfi/taskkill/taskkill.py +0 -0
  66. {pysfi-0.1.7 → pysfi-0.1.10}/sfi/which/which.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pysfi
3
- Version: 0.1.7
3
+ Version: 0.1.10
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'
@@ -12,6 +12,7 @@ Requires-Dist: openpyxl>=3.1.0; extra == 'all'
12
12
  Requires-Dist: pillow>=10.0.0; extra == 'all'
13
13
  Requires-Dist: pymupdf>=1.24.11; extra == 'all'
14
14
  Requires-Dist: pypdf>=3.0.0; extra == 'all'
15
+ Requires-Dist: pyside2-stubs>=5.15.2.1.2; extra == 'all'
15
16
  Requires-Dist: pyside2>=5.15.2.1; extra == 'all'
16
17
  Requires-Dist: pytesseract>=0.3.10; extra == 'all'
17
18
  Requires-Dist: python-docx>=1.1.0; extra == 'all'
@@ -22,6 +23,7 @@ Requires-Dist: markdown>=3.5; extra == 'extra'
22
23
  Requires-Dist: odfpy>=1.4.1; extra == 'extra'
23
24
  Requires-Dist: pypdf>=3.0.0; extra == 'extra'
24
25
  Provides-Extra: gui
26
+ Requires-Dist: pyside2-stubs>=5.15.2.1.2; extra == 'gui'
25
27
  Requires-Dist: pyside2>=5.15.2.1; extra == 'gui'
26
28
  Provides-Extra: ocr
27
29
  Requires-Dist: pillow>=10.0.0; extra == 'ocr'
@@ -50,7 +52,7 @@ pysfi is a Python project that provides single-file command-line utilities, desi
50
52
  - **mkp**: Make Python project utilities
51
53
  - **projectparse**: Project parsing and analysis tools
52
54
  - **pyloadergen**: Python loader code generation
53
- - **pypacker**: Python packaging utilities
55
+ - **pypack**: Python packaging utilities
54
56
 
55
57
  ## Installation
56
58
 
@@ -120,7 +122,7 @@ pysfi/
120
122
  │ ├── pyloadergen.py
121
123
  │ ├── pyproject.toml
122
124
  │ └── __init__.py
123
- └── pypacker/ # pypacker command module
125
+ └── pypack/ # pypack command module
124
126
  ├── fspacker.py
125
127
  └── pyproject.toml
126
128
  ```
@@ -1,99 +1,99 @@
1
- # pysfi
2
-
3
- Single File commands for Interactive python.
4
-
5
- ## Overview
6
-
7
- pysfi is a Python project that provides single-file command-line utilities, designed to be lightweight and easy-to-use.
8
-
9
- ## Available Commands
10
-
11
- - **alarmclk**: Alarm clock functionality
12
- - **[bumpversion](sfi/bumpversion/README.md)**: Automated version number management tool
13
- - **embedinstall**: Embed installation utilities
14
- - **[filedate](sfi/filedate/README.md)**: A file date management tool that normalizes date prefixes in filenames
15
- - **mkp**: Make Python project utilities
16
- - **projectparse**: Project parsing and analysis tools
17
- - **pyloadergen**: Python loader code generation
18
- - **pypacker**: Python packaging utilities
19
-
20
- ## Installation
21
-
22
- ```bash
23
- # Install using uv (recommended)
24
- uv add pysfi
25
-
26
- # Or using pip
27
- pip install pysfi
28
- ```
29
-
30
- ## Development
31
-
32
- ### Requirements
33
-
34
- - Python >= 3.8
35
- - [uv](https://github.com/astral-sh/uv) (recommended) or pip
36
-
37
- ### Development Dependencies
38
-
39
- ```bash
40
- uv pip install -e ".[dev]"
41
- ```
42
-
43
- ### Code Standards
44
-
45
- The project uses Ruff for code linting and formatting:
46
-
47
- ```bash
48
- # Check code
49
- ruff check .
50
-
51
- # Format code
52
- ruff format .
53
- ```
54
-
55
- ## Project Structure
56
-
57
- ```bash
58
- pysfi/
59
- ├── pyproject.toml # Main project configuration
60
- ├── README.md
61
- └── sfi/
62
- ├── __init__.py
63
- ├── alarmclock/ # alarmclk command module
64
- │ ├── alarmclock.py
65
- │ ├── pyproject.toml
66
- │ └── __init__.py
67
- ├── embedinstall/ # embedinstall command module
68
- │ ├── embedinstall.py
69
- │ ├── pyproject.toml
70
- │ └── __init__.py
71
- ├── filedate/ # filedate command module
72
- │ ├── filedate.py
73
- │ ├── pyproject.toml
74
- │ ├── README.md # Detailed documentation
75
- │ └── __init__.py
76
- ├── makepython/ # mkp command module
77
- │ ├── makepython.py
78
- │ ├── pyproject.toml
79
- │ └── __init__.py
80
- ├── projectparse/ # projectparse command module
81
- │ ├── projectparse.py
82
- │ ├── pyproject.toml
83
- │ └── __init__.py
84
- ├── pyloadergen/ # pyloadergen command module
85
- │ ├── pyloadergen.py
86
- │ ├── pyproject.toml
87
- │ └── __init__.py
88
- └── pypacker/ # pypacker command module
89
- ├── fspacker.py
90
- └── pyproject.toml
91
- ```
92
-
93
- ## License
94
-
95
- MIT License
96
-
97
- ## Contributing
98
-
99
- Issues and Pull Requests are welcome!
1
+ # pysfi
2
+
3
+ Single File commands for Interactive python.
4
+
5
+ ## Overview
6
+
7
+ pysfi is a Python project that provides single-file command-line utilities, designed to be lightweight and easy-to-use.
8
+
9
+ ## Available Commands
10
+
11
+ - **alarmclk**: Alarm clock functionality
12
+ - **[bumpversion](sfi/bumpversion/README.md)**: Automated version number management tool
13
+ - **embedinstall**: Embed installation utilities
14
+ - **[filedate](sfi/filedate/README.md)**: A file date management tool that normalizes date prefixes in filenames
15
+ - **mkp**: Make Python project utilities
16
+ - **projectparse**: Project parsing and analysis tools
17
+ - **pyloadergen**: Python loader code generation
18
+ - **pypack**: Python packaging utilities
19
+
20
+ ## Installation
21
+
22
+ ```bash
23
+ # Install using uv (recommended)
24
+ uv add pysfi
25
+
26
+ # Or using pip
27
+ pip install pysfi
28
+ ```
29
+
30
+ ## Development
31
+
32
+ ### Requirements
33
+
34
+ - Python >= 3.8
35
+ - [uv](https://github.com/astral-sh/uv) (recommended) or pip
36
+
37
+ ### Development Dependencies
38
+
39
+ ```bash
40
+ uv pip install -e ".[dev]"
41
+ ```
42
+
43
+ ### Code Standards
44
+
45
+ The project uses Ruff for code linting and formatting:
46
+
47
+ ```bash
48
+ # Check code
49
+ ruff check .
50
+
51
+ # Format code
52
+ ruff format .
53
+ ```
54
+
55
+ ## Project Structure
56
+
57
+ ```bash
58
+ pysfi/
59
+ ├── pyproject.toml # Main project configuration
60
+ ├── README.md
61
+ └── sfi/
62
+ ├── __init__.py
63
+ ├── alarmclock/ # alarmclk command module
64
+ │ ├── alarmclock.py
65
+ │ ├── pyproject.toml
66
+ │ └── __init__.py
67
+ ├── embedinstall/ # embedinstall command module
68
+ │ ├── embedinstall.py
69
+ │ ├── pyproject.toml
70
+ │ └── __init__.py
71
+ ├── filedate/ # filedate command module
72
+ │ ├── filedate.py
73
+ │ ├── pyproject.toml
74
+ │ ├── README.md # Detailed documentation
75
+ │ └── __init__.py
76
+ ├── makepython/ # mkp command module
77
+ │ ├── makepython.py
78
+ │ ├── pyproject.toml
79
+ │ └── __init__.py
80
+ ├── projectparse/ # projectparse command module
81
+ │ ├── projectparse.py
82
+ │ ├── pyproject.toml
83
+ │ └── __init__.py
84
+ ├── pyloadergen/ # pyloadergen command module
85
+ │ ├── pyloadergen.py
86
+ │ ├── pyproject.toml
87
+ │ └── __init__.py
88
+ └── pypack/ # pypack command module
89
+ ├── fspacker.py
90
+ └── pyproject.toml
91
+ ```
92
+
93
+ ## License
94
+
95
+ MIT License
96
+
97
+ ## Contributing
98
+
99
+ Issues and Pull Requests are welcome!
@@ -0,0 +1,77 @@
1
+ # Pypack Demo
2
+
3
+ This is a demo application to showcase the pypack workflow packaging tool.
4
+
5
+ ## Installation
6
+
7
+ Ensure pypack is installed:
8
+
9
+ ```bash
10
+ cd sfi/pypack
11
+ pip install -e .
12
+ ```
13
+
14
+ ## Usage
15
+
16
+ ### Basic Build
17
+
18
+ ```bash
19
+ cd sfi/examples/pack_demo
20
+ pypack build
21
+ ```
22
+
23
+ This will:
24
+
25
+ 1. Parse the `pyproject.toml` file
26
+ 2. Pack the source code
27
+ 3. Install Python runtime
28
+ 4. Generate a console loader
29
+ 5. Assemble the final package
30
+
31
+ ### Advanced Build Options
32
+
33
+ ```bash
34
+ # Build with GUI loader
35
+ pypack build --loader-type gui
36
+
37
+ # Build with specific Python version
38
+ pypack build --python-version 3.11.5
39
+
40
+ # Skip loader generation (faster for development)
41
+ pypack build --no-loader
42
+
43
+ # Build with verbose logging
44
+ pypack build --debug
45
+ ```
46
+
47
+ ## Output
48
+
49
+ After successful build, the output will be in `dist/package/`:
50
+
51
+ ```
52
+ dist/package/
53
+ ├── src/ # Packed source code
54
+ ├── runtime/ # Python runtime
55
+ ├── main.exe # Generated loader
56
+ └── metadata.json # Package metadata
57
+ ```
58
+
59
+ ## Running the Packaged Application
60
+
61
+ Run the generated loader:
62
+
63
+ ```bash
64
+ cd dist/package
65
+ ./main.exe
66
+ ```
67
+
68
+ ## Workflow Stages
69
+
70
+ The packaging process executes the following stages:
71
+
72
+ 1. **Parse Project**: Extract project information from `pyproject.toml`
73
+ 2. **Pack Source & Install Python**: Parallel execution of source packing and Python installation
74
+ 3. **Generate Loader**: Create cross-platform loader executable
75
+ 4. **Assemble Package**: Combine all components into final package
76
+
77
+ Each stage can run independently or in parallel based on dependencies, maximizing efficiency.
@@ -1,137 +1,148 @@
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
+ [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.10"
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
+ pylibpack = "sfi.pylibpack.pylibpack:main"
24
+ pyloadergen = "sfi.pyloadergen.pyloadergen:main"
25
+ pyp = "sfi.pypack.pypack:main"
26
+ pypack = "sfi.pypack.pypack:main"
27
+ pysourcepack = "sfi.pysourcepack.pysourcepack:main"
28
+ sfi = "sfi.cli:main"
29
+ taskk = "sfi.taskkill.taskkill:main"
30
+ wch = "sfi.which.which:main"
31
+
32
+ [project.optional-dependencies]
33
+ all = ["pysfi[gui,office,ocr,extra]"]
34
+ extra = ["ebooklib>=0.18", "markdown>=3.5", "odfpy>=1.4.1", "pypdf>=3.0.0"]
35
+ gui = ["PySide2>=5.15.2.1", "pyside2-stubs>=5.15.2.1.2"]
36
+ ocr = ["Pillow>=10.0.0", "pytesseract>=0.3.10"]
37
+ office = [
38
+ "openpyxl>=3.1.0",
39
+ "pymupdf>=1.24.11",
40
+ "python-docx>=1.1.0",
41
+ "python-pptx>=0.6.21",
42
+ ]
43
+
44
+ [tool.hatch.build.targets.wheel]
45
+ exclude = [
46
+ "sfi/*/README.md",
47
+ "sfi/*/dist",
48
+ "sfi/*/pyproject.toml",
49
+ "sfi/*/tests",
50
+ ]
51
+ packages = ["sfi"]
52
+
53
+ # Only include necessary source files to minimize package size
54
+ [tool.hatch.build]
55
+ include = ["README.md", "sfi/**/*.py", "sfi/pyproject.toml"]
56
+
57
+ [tool.ruff]
58
+ line-length = 120
59
+ target-version = "py38"
60
+
61
+ # Exclude files and directories
62
+ exclude = [
63
+ ".bzr",
64
+ ".direnv",
65
+ ".eggs",
66
+ ".git",
67
+ ".git-rewrite",
68
+ ".hg",
69
+ ".mypy_cache",
70
+ ".nox",
71
+ ".pants.d",
72
+ ".pytype",
73
+ ".ruff_cache",
74
+ ".svn",
75
+ ".tox",
76
+ ".venv",
77
+ "__pypackages__",
78
+ "_build",
79
+ "buck-out",
80
+ "build",
81
+ "dist",
82
+ "node_modules",
83
+ "venv",
84
+ ]
85
+
86
+ [tool.ruff.lint]
87
+ dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$"
88
+ fixable = ["ALL"]
89
+ ignore = [
90
+ "B008", # Do not perform function calls in function arguments
91
+ "E501", # Line too long (handled by formatter)
92
+ "RUF001", # Language specific rules
93
+ "RUF002", # Language specific rules
94
+ "RUF003", # Language specific rules
95
+ ]
96
+ select = [
97
+ "B", # flake8-bugbear
98
+ "C4", # flake8-comprehensions
99
+ "E", # pycodestyle errors
100
+ "F", # Pyflakes
101
+ "I", # isort
102
+ "N", # pep8-naming
103
+ "RUF", # Ruff-specific rules
104
+ "SIM", # flake8-simplify
105
+ "UP", # pyupgrade
106
+ "W", # pycodestyle warnings
107
+ ]
108
+ unfixable = []
109
+
110
+ [tool.ruff.lint.isort]
111
+ known-first-party = ["sfi"]
112
+
113
+ [tool.ruff.lint.per-file-ignores]
114
+ "__init__.py" = ["F401"] # Allow unused imports
115
+
116
+ [tool.uv.workspace]
117
+ members = [
118
+ "sfi/alarmclock",
119
+ "sfi/bumpversion",
120
+ "sfi/docscan",
121
+ "sfi/embedinstall",
122
+ "sfi/filedate",
123
+ "sfi/makepython",
124
+ "sfi/pdfsplit",
125
+ "sfi/projectparse",
126
+ "sfi/pylibpack",
127
+ "sfi/pyloadergen",
128
+ "sfi/pypack",
129
+ "sfi/pysourcepack",
130
+ "sfi/taskkill",
131
+ "sfi/which",
132
+ "sfi/workflowengine",
133
+ ]
134
+
135
+ [dependency-groups]
136
+ dev = [
137
+ "hatch>=1.14.2",
138
+ "pysfi[all]",
139
+ "pyside2>=5.15.2.1",
140
+ "pytest-asyncio>=0.24.0",
141
+ "pytest-benchmark>=4.0.0",
142
+ "pytest-cov>=5.0.0",
143
+ "pytest-mock>=3.14.0",
144
+ "pytest>=8.3.5",
145
+ "qdarkstyle>=3.2.3",
146
+ "ruff>=0.14.11",
147
+ "tomli>=2.4.0",
148
+ ]
@@ -1,3 +1,3 @@
1
1
  """Single File commands for Interactive python."""
2
2
 
3
- __version__ = "0.1.7"
3
+ __version__ = "0.1.10"
@@ -1,3 +1,3 @@
1
1
  """Bumpversion - Automated version number management tool."""
2
2
 
3
- __version__ = "0.1.7"
3
+ __version__ = "0.1.10"
@@ -1,3 +1,3 @@
1
1
  """Document scanner module for scanning and extracting content from various document formats."""
2
2
 
3
- __version__ = "0.1.7"
3
+ __version__ = "0.1.10"