sortmeout 1.0.0__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.
@@ -0,0 +1,302 @@
1
+ Metadata-Version: 2.4
2
+ Name: sortmeout
3
+ Version: 1.0.0
4
+ Summary: Open-source file automation and organization tool for macOS
5
+ Author: SortMeOut Contributors
6
+ License: MIT
7
+ Project-URL: Homepage, https://sortmeout.saidborna.com
8
+ Project-URL: Documentation, https://github.com/S-Borna/sortmeout/tree/main/docs
9
+ Project-URL: Repository, https://github.com/S-Borna/sortmeout
10
+ Project-URL: Issues, https://github.com/S-Borna/sortmeout/issues
11
+ Keywords: automation,file-management,macos,organization,rules,workflow
12
+ Classifier: Development Status :: 3 - Alpha
13
+ Classifier: Environment :: MacOS X
14
+ Classifier: Intended Audience :: End Users/Desktop
15
+ Classifier: License :: OSI Approved :: MIT License
16
+ Classifier: Operating System :: MacOS :: MacOS X
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3.9
19
+ Classifier: Programming Language :: Python :: 3.10
20
+ Classifier: Programming Language :: Python :: 3.11
21
+ Classifier: Programming Language :: Python :: 3.12
22
+ Classifier: Topic :: Desktop Environment :: File Managers
23
+ Classifier: Topic :: System :: Filesystems
24
+ Classifier: Topic :: Utilities
25
+ Requires-Python: >=3.9
26
+ Description-Content-Type: text/markdown
27
+ License-File: LICENSE
28
+ Requires-Dist: watchdog>=3.0.0
29
+ Requires-Dist: pyobjc-core>=9.0
30
+ Requires-Dist: pyobjc-framework-Cocoa>=9.0
31
+ Requires-Dist: pyobjc-framework-FSEvents>=9.0
32
+ Requires-Dist: pyobjc-framework-Quartz>=9.0
33
+ Requires-Dist: pyobjc-framework-ScriptingBridge>=9.0
34
+ Requires-Dist: pyyaml>=6.0
35
+ Requires-Dist: python-dateutil>=2.8.0
36
+ Requires-Dist: rich>=13.0.0
37
+ Requires-Dist: click>=8.0.0
38
+ Requires-Dist: appdirs>=1.4.0
39
+ Requires-Dist: humanize>=4.0.0
40
+ Provides-Extra: dev
41
+ Requires-Dist: pytest>=7.0.0; extra == "dev"
42
+ Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
43
+ Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
44
+ Requires-Dist: pytest-mock>=3.0.0; extra == "dev"
45
+ Requires-Dist: mypy>=1.0.0; extra == "dev"
46
+ Requires-Dist: black>=23.0.0; extra == "dev"
47
+ Requires-Dist: flake8>=6.0.0; extra == "dev"
48
+ Requires-Dist: isort>=5.0.0; extra == "dev"
49
+ Requires-Dist: pre-commit>=3.0.0; extra == "dev"
50
+ Provides-Extra: gui
51
+ Requires-Dist: rumps>=0.4.0; extra == "gui"
52
+ Requires-Dist: pyobjc-framework-Cocoa>=9.0; extra == "gui"
53
+ Dynamic: license-file
54
+
55
+ # SortMeOut 📁✨
56
+
57
+ An open-source file automation and organization tool for macOS, inspired by Noodlesoft Hazel.
58
+
59
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
60
+ [![Python 3.9+](https://img.shields.io/badge/python-3.9+-blue.svg)](https://www.python.org/downloads/)
61
+ [![macOS](https://img.shields.io/badge/platform-macOS-lightgrey.svg)](https://www.apple.com/macos/)
62
+
63
+ ## 🎯 Overview
64
+
65
+ SortMeOut watches folders you specify and automatically organizes files according to rules you create. Move, rename, tag, archive, or delete files based on name, date, type, content, and much more.
66
+
67
+ ## ✨ Features
68
+
69
+ ### Core Features
70
+
71
+ - **Folder Watching**: Monitor multiple folders for file changes in real-time
72
+ - **Rule-Based Organization**: Create powerful rules with conditions and actions
73
+ - **Pattern Matching**: Use glob patterns, regex, and smart matching
74
+ - **File Operations**: Move, copy, rename, delete, archive files
75
+ - **macOS Integration**: Tags, Spotlight metadata, Finder comments
76
+
77
+ ### Conditions
78
+
79
+ - File name (contains, starts with, ends with, matches pattern)
80
+ - File extension/type (documents, images, videos, etc.)
81
+ - File size (greater than, less than, between)
82
+ - Date attributes (created, modified, accessed, added)
83
+ - File contents (text search, regex)
84
+ - macOS tags and Finder comments
85
+ - Source URL/application (where downloaded from)
86
+ - Nested conditions (AND, OR, NOT logic)
87
+
88
+ ### Actions
89
+
90
+ - Move to folder (with subfolder creation)
91
+ - Copy to folder
92
+ - Rename (with pattern substitution)
93
+ - Add/remove macOS tags
94
+ - Set Finder comments
95
+ - Archive (zip, tar, gzip)
96
+ - Delete / Move to Trash
97
+ - Run shell script
98
+ - Execute AppleScript
99
+ - Open with application
100
+ - Send notification
101
+ - Import to Photos/Music
102
+
103
+ ### Advanced Features
104
+
105
+ - **Trash Management**: Auto-clean trash based on age/size
106
+ - **App Sweep**: Detect and remove app support files when uninstalling
107
+ - **Preview Mode**: See what rules would do without executing
108
+ - **Rule Import/Export**: Share rules with others
109
+ - **Logging**: Detailed logs of all operations
110
+ - **Menu Bar App**: Quick access and status
111
+
112
+ ## 🚀 Quick Start
113
+
114
+ ### Installation
115
+
116
+ ```bash
117
+ # Clone the repository
118
+ git clone https://github.com/yourusername/sortmeout.git
119
+ cd sortmeout
120
+
121
+ # Create virtual environment
122
+ python3 -m venv venv
123
+ source venv/bin/activate
124
+
125
+ # Install dependencies
126
+ pip install -r requirements.txt
127
+
128
+ # Install the application
129
+ pip install -e .
130
+ ```
131
+
132
+ ### Basic Usage
133
+
134
+ ```python
135
+ from sortmeout import SortMeOut, Rule, Condition, Action
136
+
137
+ # Create a new instance
138
+ app = SortMeOut()
139
+
140
+ # Add a folder to watch
141
+ app.add_folder("~/Downloads")
142
+
143
+ # Create a rule to organize PDF files
144
+ rule = Rule(
145
+ name="Organize PDFs",
146
+ conditions=[
147
+ Condition("extension", "equals", "pdf")
148
+ ],
149
+ actions=[
150
+ Action("move", destination="~/Documents/PDFs")
151
+ ]
152
+ )
153
+
154
+ # Add rule to the Downloads folder
155
+ app.add_rule("~/Downloads", rule)
156
+
157
+ # Start watching
158
+ app.start()
159
+ ```
160
+
161
+ ### GUI Application
162
+
163
+ ```bash
164
+ # Launch the GUI
165
+ sortmeout-gui
166
+ ```
167
+
168
+ ## 📖 Documentation
169
+
170
+ - [User Manual](docs/user-manual.md)
171
+ - [Rule Creation Guide](docs/rules-guide.md)
172
+ - [API Reference](docs/api-reference.md)
173
+ - [Contributing Guide](CONTRIBUTING.md)
174
+ - [FAQ](docs/faq.md)
175
+
176
+ ## 🗺️ Roadmap
177
+
178
+ ### Phase 1: Core Engine (v0.1.0) ✅
179
+
180
+ - [x] Folder monitoring with FSEvents
181
+ - [x] Basic rule engine
182
+ - [x] File conditions (name, extension, size, date)
183
+ - [x] Basic actions (move, copy, rename, delete)
184
+
185
+ ### Phase 2: Advanced Conditions (v0.2.0)
186
+
187
+ - [ ] Content-based matching
188
+ - [ ] macOS metadata (tags, comments)
189
+ - [ ] Download source detection
190
+ - [ ] Compound conditions (AND/OR/NOT)
191
+
192
+ ### Phase 3: Advanced Actions (v0.3.0)
193
+
194
+ - [ ] Archive creation
195
+ - [ ] Shell script execution
196
+ - [ ] AppleScript integration
197
+ - [ ] Notifications
198
+
199
+ ### Phase 4: GUI & UX (v0.4.0)
200
+
201
+ - [ ] Menu bar application
202
+ - [ ] Rule editor interface
203
+ - [ ] Preview mode
204
+ - [ ] Activity log viewer
205
+
206
+ ### Phase 5: System Features (v0.5.0)
207
+
208
+ - [ ] Trash management
209
+ - [ ] App Sweep functionality
210
+ - [ ] Spotlight integration
211
+ - [ ] Photos/Music import
212
+
213
+ ### Phase 6: Polish & Release (v1.0.0)
214
+
215
+ - [ ] Performance optimization
216
+ - [ ] Comprehensive testing
217
+ - [ ] Documentation complete
218
+ - [ ] Community feedback integration
219
+
220
+ ## 🛠️ Development
221
+
222
+ ### Prerequisites
223
+
224
+ - macOS 10.15 (Catalina) or later
225
+ - Python 3.9 or later
226
+ - Xcode Command Line Tools
227
+
228
+ ### Setup Development Environment
229
+
230
+ ```bash
231
+ # Install development dependencies
232
+ pip install -r requirements-dev.txt
233
+
234
+ # Run tests
235
+ pytest
236
+
237
+ # Run with coverage
238
+ pytest --cov=sortmeout
239
+
240
+ # Type checking
241
+ mypy sortmeout
242
+
243
+ # Linting
244
+ flake8 sortmeout
245
+ black sortmeout
246
+ ```
247
+
248
+ ### Project Structure
249
+
250
+ ```
251
+ sortmeout/
252
+ ├── sortmeout/ # Main package
253
+ │ ├── __init__.py
254
+ │ ├── app.py # Main application class
255
+ │ ├── core/ # Core functionality
256
+ │ │ ├── __init__.py
257
+ │ │ ├── watcher.py # Folder watching (FSEvents)
258
+ │ │ ├── rule.py # Rule definitions
259
+ │ │ ├── condition.py # Condition types
260
+ │ │ └── action.py # Action types
261
+ │ ├── conditions/ # Condition implementations
262
+ │ ├── actions/ # Action implementations
263
+ │ ├── macos/ # macOS-specific integrations
264
+ │ ├── gui/ # GUI components
265
+ │ ├── utils/ # Utility functions
266
+ │ └── config/ # Configuration management
267
+ ├── tests/ # Test suite
268
+ ├── docs/ # Documentation
269
+ ├── examples/ # Example rules and scripts
270
+ └── resources/ # Icons, assets
271
+ ```
272
+
273
+ ## 🤝 Contributing
274
+
275
+ We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.
276
+
277
+ ### Ways to Contribute
278
+
279
+ - Report bugs and request features via [Issues](https://github.com/yourusername/sortmeout/issues)
280
+ - Submit pull requests for bug fixes or new features
281
+ - Improve documentation
282
+ - Share your custom rules
283
+ - Help translate the application
284
+
285
+ ## 📄 License
286
+
287
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
288
+
289
+ ## 🙏 Acknowledgments
290
+
291
+ - Inspired by [Noodlesoft Hazel](https://www.noodlesoft.com)
292
+ - Built with [watchdog](https://github.com/gorakhargosh/watchdog) for cross-platform file monitoring
293
+ - Uses [PyObjC](https://pyobjc.readthedocs.io/) for macOS integration
294
+
295
+ ## 📬 Contact
296
+
297
+ - GitHub Issues: For bug reports and feature requests
298
+ - Discussions: For questions and community support
299
+
300
+ ---
301
+
302
+ **Note**: This is an independent open-source project and is not affiliated with Noodlesoft.
@@ -0,0 +1,27 @@
1
+ sortmeout/__init__.py,sha256=Ap9DETDBO_FM2Dw9_xAaPQPOr5c8koK69wQH5n9nJZU,535
2
+ sortmeout/app.py,sha256=VHBbakCD3a5TsMY2ryvq7ohsyOtCfimRoj_wpPBF7gI,19535
3
+ sortmeout/cli.py,sha256=X5FDq45dNh1tlJOiehXPlRKzacKB4wlxYUTP5NUq2Pc,16745
4
+ sortmeout/config/__init__.py,sha256=WXC9kRjC4btHauoAC1XLgYCIL7BOPK0kEsuTXRBvQ7c,199
5
+ sortmeout/config/manager.py,sha256=2AbVsj0QgX1g7X18aUXDZpbgqzUUWbvPZRqrzU09DDA,9396
6
+ sortmeout/config/settings.py,sha256=vg_pa_BC7ZUAuYqn6WXbiDriwmvMWdhqZlF-vrxaVV8,7310
7
+ sortmeout/core/__init__.py,sha256=7egI0IwpndkfafMnGWNqp8KumwuKSrjuQb0wqTTYsqA,501
8
+ sortmeout/core/action.py,sha256=9Yp3w449s8K8SWmAhGS3PoywPPDtOYYkvcVpEUq5yZw,29860
9
+ sortmeout/core/condition.py,sha256=a5OC9gKg43iOq-QZDJP20HPSHlJsSso5mN56ZjIWVcU,22949
10
+ sortmeout/core/engine.py,sha256=2W62M2JTVXFOLYTfzoWjHavDqjptJQlxuiFys5yYi-o,12346
11
+ sortmeout/core/rule.py,sha256=yXllTSsO_37S1D4UuL-CZuVSH9mrajMdovB0ZNB9pEY,8360
12
+ sortmeout/core/watcher.py,sha256=YPTRNwiUEmGssyASpaPmuFm0AmNTzSePoCMldvNuFt8,13854
13
+ sortmeout/gui/__init__.py,sha256=Ix0TtKSrND8vD9oaS4BYPQLPyQtaQyyYt4Wbzc6u2NA,127
14
+ sortmeout/gui/app.py,sha256=yBV7ivN0EbfsOc5NhnRNbPoi3RoXrT9BQHeIcBzdQww,10508
15
+ sortmeout/macos/__init__.py,sha256=X-OU9MRmw0eK6WbHUNr7ult38XhBlzh7iOxYocj7DjQ,459
16
+ sortmeout/macos/spotlight.py,sha256=qLW0ZPbf_CUwolFzD_89ALkb-SwOHvuP6JJk6hVuMU8,8471
17
+ sortmeout/macos/tags.py,sha256=cBYEUBsZ2CYqGPbXW53ejn_ljvM8nvBj0L0g_h-35Ds,7206
18
+ sortmeout/macos/trash.py,sha256=zfPvkEb5LFONpCu6LXVRODI5SU0-DZ5ih_X4A7Ym4hI,11989
19
+ sortmeout/utils/__init__.py,sha256=x9Mb7OEuQs47hUCzObBNtokk9pu_p_feMCb6MnDev1w,230
20
+ sortmeout/utils/file_info.py,sha256=JKTK56VSUCdzSuDqpNt_W3_Hby_VegjFtAd7G4HyYsA,9852
21
+ sortmeout/utils/logger.py,sha256=jzNc8iZnKJ1ML2yawTbCT7jyrLkEr1r7eqwLGG6o_hM,5584
22
+ sortmeout-1.0.0.dist-info/licenses/LICENSE,sha256=TDyRoc2MaTsSKooQQE8pjE04O3SisR0CFbP-lGmqB9U,1079
23
+ sortmeout-1.0.0.dist-info/METADATA,sha256=dP32kt6OvS7gkvf2yLBTwunyTFWx5ytt7iusNiqutYM,8863
24
+ sortmeout-1.0.0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
25
+ sortmeout-1.0.0.dist-info/entry_points.txt,sha256=739npal24AFq2-335O9G5kpuoXFWTXfwjFEHmZlmOEU,88
26
+ sortmeout-1.0.0.dist-info/top_level.txt,sha256=jnlVjHBFfRoTfyW9d98r-oRGMnuXj66ZQ06KVD9_SdA,10
27
+ sortmeout-1.0.0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (80.10.2)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,3 @@
1
+ [console_scripts]
2
+ sortmeout = sortmeout.cli:main
3
+ sortmeout-gui = sortmeout.gui.app:main
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 SortMeOut Contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1 @@
1
+ sortmeout