ae-dlo 0.6.5__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.
@@ -0,0 +1,89 @@
1
+ # ==========================================
2
+ # Python
3
+ # ==========================================
4
+
5
+ __pycache__/
6
+ *.py[cod]
7
+ *.pyo
8
+ *.pyd
9
+ *.so
10
+
11
+ # Distribution
12
+ build/
13
+ dist/
14
+ *.egg-info/
15
+
16
+ # Virtual environments
17
+ .venv/
18
+ venv/
19
+ env/
20
+ ENV/
21
+
22
+ # ==========================================
23
+ # Testing & Coverage
24
+ # ==========================================
25
+
26
+ .pytest_cache/
27
+ .coverage
28
+ coverage.xml
29
+ htmlcov/
30
+
31
+ # ==========================================
32
+ # Type checking
33
+ # ==========================================
34
+
35
+ .mypy_cache/
36
+ .pytype/
37
+ .pyre/
38
+
39
+ # ==========================================
40
+ # IDEs
41
+ # ==========================================
42
+
43
+ .vscode/
44
+ .idea/
45
+
46
+ # ==========================================
47
+ # macOS
48
+ # ==========================================
49
+
50
+ .DS_Store
51
+ .AppleDouble
52
+ .LSOverride
53
+
54
+ # ==========================================
55
+ # Logs
56
+ # ==========================================
57
+
58
+ logs/*
59
+ !logs/.gitkeep
60
+
61
+ *.log
62
+
63
+ # ==========================================
64
+ # Temporary files
65
+ # ==========================================
66
+
67
+ *.tmp
68
+ *.temp
69
+ *.swp
70
+ *.swo
71
+
72
+ # ==========================================
73
+ # Local configuration
74
+ # ==========================================
75
+
76
+ .env
77
+ .env.*
78
+
79
+ # ==========================================
80
+ # Project-specific
81
+ # ==========================================
82
+
83
+ config/local_rules.json
84
+
85
+ # My test folder
86
+ test/
87
+
88
+ # My custom rules for flake8 (line lenght limit 120)
89
+ .flake8
ae_dlo-0.6.5/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Abbas Endari
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.
ae_dlo-0.6.5/PKG-INFO ADDED
@@ -0,0 +1,212 @@
1
+ Metadata-Version: 2.5
2
+ Name: ae-dlo
3
+ Version: 0.6.5
4
+ Summary: A lightweight, deterministic, privacy-first Downloads folder organizer.
5
+ Project-URL: Homepage, https://github.com/a-endari/downloads-organizer
6
+ Author-email: Abbas Endari <a.endari@gmail.com>
7
+ License-Expression: MIT
8
+ License-File: LICENSE
9
+ Classifier: Operating System :: OS Independent
10
+ Classifier: Programming Language :: Python :: 3
11
+ Requires-Python: >=3.13
12
+ Provides-Extra: dev
13
+ Requires-Dist: pytest; extra == 'dev'
14
+ Requires-Dist: ruff; extra == 'dev'
15
+ Description-Content-Type: text/markdown
16
+
17
+ <div align="center">
18
+
19
+ # 📂 Downloads Organizer
20
+
21
+ > **A lightweight, privacy-first Downloads folder organizer written in Python.**
22
+
23
+ [![Python](https://img.shields.io/badge/Python-3.13+-3776AB?style=for-the-badge&logo=python&logoColor=white)](https://python.org)
24
+ [![License](https://img.shields.io/badge/License-MIT-blue.svg?style=for-the-badge)](LICENSE)
25
+ [![Platform](https://img.shields.io/badge/Platform-macOS%20%7C%20Linux%20%7C%20Windows-lightgrey?style=for-the-badge)](#-quick-start)
26
+ [![Privacy](https://img.shields.io/badge/Privacy-100%25%20Offline-success?style=for-the-badge)](#-privacy--philosophy)
27
+ [![Stars](https://img.shields.io/github/stars/a-endari/downloads-organizer?style=for-the-badge)](https://github.com/a-endari/downloads-organizer/stargazers)
28
+ [![TestPyPI](https://img.shields.io/badge/TestPyPI-v0.5.2-673AB7?style=for-the-badge&logo=pypi&logoColor=white)](https://test.pypi.org/project/downloads-organizer/)
29
+ [![CI](https://img.shields.io/github/actions/workflow/status/a-endari/downloads-organizer/ci.yml?style=for-the-badge&logo=github-actions&logoColor=white)](https://github.com/a-endari/downloads-organizer/actions)
30
+
31
+ </div>
32
+
33
+ ---
34
+
35
+ ## Table of Contents
36
+
37
+ - [Demo](#demo)
38
+ - [Why Download This?](#why-download-this)
39
+ - [What Gets Sorted](#what-gets-sorted)
40
+ - [Installation](#-installation)
41
+ - [Quick Start](#-quick-start)
42
+ - [Configuration](#configuration)
43
+ - [Privacy & Philosophy](#privacy--philosophy)
44
+ - [License](#license)
45
+
46
+ ---
47
+
48
+ ## Demo
49
+
50
+ Here is `downloads-organizer` in action:
51
+
52
+ ![Downloads Organizer demo](https://raw.githubusercontent.com/a-endari/downloads-organizer/main/demo/demo.gif)
53
+
54
+ _This demo terminal recording was created using [VHS](https://github.com/charmbracelet/vhs) by Charm._
55
+
56
+ ---
57
+
58
+ ## Why Download This?
59
+
60
+ I built this because my own Downloads folder was a mess — hundreds of PDFs, screenshots, installers, and code files all mixed together. I wanted something that:
61
+
62
+ - **Just works** — one command: `downloads-organizer organize`
63
+ - **Stays out of my way** — runs in milliseconds, no background daemon, no UI
64
+ - **Respects my privacy** — zero network calls, zero telemetry, zero AI
65
+ - **Handles macOS apps correctly** — treats `.app` bundles as single files
66
+ - **Lets me customize** — simple TOML config when I want it, sensible defaults when I don't
67
+
68
+ No subscriptions, no cloud, no nonsense. Just a clean Downloads folder.
69
+
70
+ ---
71
+
72
+ ## What Gets Sorted
73
+
74
+ By default, files are organized into these 9 categories (all customizable via config):
75
+
76
+ | Category | Default Folder | Common Extensions |
77
+ | -------- | -------------- | ----------------- |
78
+ | 📄 Documents | `Documents` | `.pdf`, `.doc`, `.docx`, `.xlsx`, `.pptx`, `.txt`, `.md`, `.csv` |
79
+ | 🖼️ Pictures | `Pictures` | `.jpg`, `.png`, `.webp`, `.gif`, `.heic`, `.avif`, `.svg` |
80
+ | 🎵 Audio | `Audio` | `.mp3`, `.wav`, `.flac`, `.aac`, `.m4a`, `.ogg` |
81
+ | 🎬 Video | `Video` | `.mp4`, `.mkv`, `.mov`, `.webm`, `.avi`, `.m4v` |
82
+ | 💻 Code | `Code` | `.py`, `.js`, `.ts`, `.html`, `.css`, `.json`, `.toml`, `.cpp`, `.rs` |
83
+ | ⚙️ Programs | `Programs` | `.exe`, `.dmg`, `.pkg`, `.deb`, `.app`, `.msi`, `.apk` |
84
+ | 📦 Compressed | `Compressed` | `.zip`, `.tar`, `.gz`, `.7z`, `.rar`, `.bz2`, `.iso` |
85
+ | 📚 Ebooks | `Ebooks` | `.epub`, `.mobi`, `.azw`, `.azw3`, `.fb2` |
86
+ | 📁 Other | `Other Files` / `Other Folders` | Everything else |
87
+
88
+ > 💡 **Customizable:** Change folder names, add categories, or override rules in your config file. See [Configuration](#configuration).
89
+
90
+ ---
91
+
92
+ ## 🚀 Installation
93
+
94
+ ### Option 1: **pipx** (Recommended — System-wide, isolated)
95
+
96
+ ```bash
97
+ pipx install downloads-organizer --index-url https://test.pypi.org/simple/
98
+ ```
99
+
100
+ > **Why pipx?** Installs in an isolated environment, makes `downloads-organizer` available globally, and avoids polluting your system Python. Best for CLI tools.
101
+
102
+ #### Installing pipx
103
+
104
+ | Platform | Command |
105
+ | -------- | ------- |
106
+ | **macOS** | `brew install pipx && pipx ensurepath` |
107
+ | **Linux** | `sudo apt install pipx && pipx ensurepath` (or your distro's equivalent) |
108
+ | **Windows** | `pip install pipx && pipx ensurepath` (requires Python + PATH) |
109
+
110
+ After installing pipx, restart your shell, then run the pipx install command above.
111
+
112
+ ---
113
+
114
+ ### Option 2: **pip** (From TestPyPI)
115
+
116
+ ```bash
117
+ pip install downloads-organizer --index-url https://test.pypi.org/simple/ --no-deps
118
+ ```
119
+
120
+ > This package has zero runtime dependencies. `--no-deps` avoids TestPyPI dependency resolution issues.
121
+
122
+ ---
123
+
124
+ ### Option 3: **From Source** (Development)
125
+
126
+ ```bash
127
+ git clone https://github.com/a-endari/downloads-organizer.git
128
+ cd downloads-organizer
129
+ pip install -e .
130
+ ```
131
+
132
+ ---
133
+
134
+ ### Option 4: **pip** (From PyPI — *Coming Soon*)
135
+
136
+ ```bash
137
+ pip install downloads-organizer
138
+ ```
139
+
140
+ ---
141
+
142
+ ## 📖 Quick Start
143
+
144
+ ```bash
145
+ # 1. See what's in your Downloads
146
+ downloads-organizer
147
+
148
+ # 2. Preview changes (dry run)
149
+ downloads-organizer organize --dry-run
150
+
151
+ # 3. Run the organization
152
+ downloads-organizer organize
153
+
154
+ # 4. Organize specific categories only
155
+ downloads-organizer organize --only Documents
156
+ downloads-organizer organize --only Code,Programs
157
+
158
+ # 5. Get help
159
+ downloads-organizer --help
160
+ ```
161
+
162
+ ---
163
+
164
+ ## Configuration
165
+
166
+ Customize folder names, add ignore rules, or create your own categories via a TOML config file.
167
+
168
+ **Config file locations:**
169
+ - **macOS/Linux:** `~/.config/downloads-organizer/config.toml`
170
+ - **Windows:** `%APPDATA%\downloads-organizer\config.toml`
171
+
172
+ **Quick example:**
173
+ ```toml
174
+ [ignore]
175
+ files = [".DS_Store", "desktop.ini", ".gitkeep"]
176
+ directories = ["In_Progress", "Keep_Here"]
177
+
178
+ [categories.documents]
179
+ folder = "My Documents"
180
+ ```
181
+
182
+ 📖 **Full documentation:** [Configuration Guide](docs/configuration.md)
183
+
184
+ ---
185
+
186
+ ## Privacy & Philosophy
187
+
188
+ - **100% offline** — No network calls, ever. Your filenames never leave your machine.
189
+ - **No AI** — Deterministic rules. `tax_return_2024.pdf` always goes to Documents. No hallucinations, no surprises.
190
+ - **No telemetry** — No usage tracking, no analytics, no phone-home.
191
+ - **Safe by default** — Always preview with `--dry-run` first.
192
+ - **Open source** — Read the code, audit the logic, fork it.
193
+
194
+ I built this for myself because every other tool either phoned home, required a subscription, or tried to be "smart" with AI. This does one thing well.
195
+
196
+ ---
197
+
198
+ ## License
199
+
200
+ MIT License — use it, fork it, modify it freely.
201
+
202
+ See [LICENSE](LICENSE) for details.
203
+
204
+ ---
205
+
206
+ <div align="center">
207
+
208
+ ### Made with 💙 by [a-endari](https://github.com/a-endari)
209
+
210
+ [⭐ Star on GitHub](https://github.com/a-endari/downloads-organizer) • [🐛 Report Issue](https://github.com/a-endari/downloads-organizer/issues) • [💬 Start Discussion](https://github.com/a-endari/downloads-organizer/discussions)
211
+
212
+ </div>
ae_dlo-0.6.5/README.md ADDED
@@ -0,0 +1,196 @@
1
+ <div align="center">
2
+
3
+ # 📂 Downloads Organizer
4
+
5
+ > **A lightweight, privacy-first Downloads folder organizer written in Python.**
6
+
7
+ [![Python](https://img.shields.io/badge/Python-3.13+-3776AB?style=for-the-badge&logo=python&logoColor=white)](https://python.org)
8
+ [![License](https://img.shields.io/badge/License-MIT-blue.svg?style=for-the-badge)](LICENSE)
9
+ [![Platform](https://img.shields.io/badge/Platform-macOS%20%7C%20Linux%20%7C%20Windows-lightgrey?style=for-the-badge)](#-quick-start)
10
+ [![Privacy](https://img.shields.io/badge/Privacy-100%25%20Offline-success?style=for-the-badge)](#-privacy--philosophy)
11
+ [![Stars](https://img.shields.io/github/stars/a-endari/downloads-organizer?style=for-the-badge)](https://github.com/a-endari/downloads-organizer/stargazers)
12
+ [![TestPyPI](https://img.shields.io/badge/TestPyPI-v0.5.2-673AB7?style=for-the-badge&logo=pypi&logoColor=white)](https://test.pypi.org/project/downloads-organizer/)
13
+ [![CI](https://img.shields.io/github/actions/workflow/status/a-endari/downloads-organizer/ci.yml?style=for-the-badge&logo=github-actions&logoColor=white)](https://github.com/a-endari/downloads-organizer/actions)
14
+
15
+ </div>
16
+
17
+ ---
18
+
19
+ ## Table of Contents
20
+
21
+ - [Demo](#demo)
22
+ - [Why Download This?](#why-download-this)
23
+ - [What Gets Sorted](#what-gets-sorted)
24
+ - [Installation](#-installation)
25
+ - [Quick Start](#-quick-start)
26
+ - [Configuration](#configuration)
27
+ - [Privacy & Philosophy](#privacy--philosophy)
28
+ - [License](#license)
29
+
30
+ ---
31
+
32
+ ## Demo
33
+
34
+ Here is `downloads-organizer` in action:
35
+
36
+ ![Downloads Organizer demo](https://raw.githubusercontent.com/a-endari/downloads-organizer/main/demo/demo.gif)
37
+
38
+ _This demo terminal recording was created using [VHS](https://github.com/charmbracelet/vhs) by Charm._
39
+
40
+ ---
41
+
42
+ ## Why Download This?
43
+
44
+ I built this because my own Downloads folder was a mess — hundreds of PDFs, screenshots, installers, and code files all mixed together. I wanted something that:
45
+
46
+ - **Just works** — one command: `downloads-organizer organize`
47
+ - **Stays out of my way** — runs in milliseconds, no background daemon, no UI
48
+ - **Respects my privacy** — zero network calls, zero telemetry, zero AI
49
+ - **Handles macOS apps correctly** — treats `.app` bundles as single files
50
+ - **Lets me customize** — simple TOML config when I want it, sensible defaults when I don't
51
+
52
+ No subscriptions, no cloud, no nonsense. Just a clean Downloads folder.
53
+
54
+ ---
55
+
56
+ ## What Gets Sorted
57
+
58
+ By default, files are organized into these 9 categories (all customizable via config):
59
+
60
+ | Category | Default Folder | Common Extensions |
61
+ | -------- | -------------- | ----------------- |
62
+ | 📄 Documents | `Documents` | `.pdf`, `.doc`, `.docx`, `.xlsx`, `.pptx`, `.txt`, `.md`, `.csv` |
63
+ | 🖼️ Pictures | `Pictures` | `.jpg`, `.png`, `.webp`, `.gif`, `.heic`, `.avif`, `.svg` |
64
+ | 🎵 Audio | `Audio` | `.mp3`, `.wav`, `.flac`, `.aac`, `.m4a`, `.ogg` |
65
+ | 🎬 Video | `Video` | `.mp4`, `.mkv`, `.mov`, `.webm`, `.avi`, `.m4v` |
66
+ | 💻 Code | `Code` | `.py`, `.js`, `.ts`, `.html`, `.css`, `.json`, `.toml`, `.cpp`, `.rs` |
67
+ | ⚙️ Programs | `Programs` | `.exe`, `.dmg`, `.pkg`, `.deb`, `.app`, `.msi`, `.apk` |
68
+ | 📦 Compressed | `Compressed` | `.zip`, `.tar`, `.gz`, `.7z`, `.rar`, `.bz2`, `.iso` |
69
+ | 📚 Ebooks | `Ebooks` | `.epub`, `.mobi`, `.azw`, `.azw3`, `.fb2` |
70
+ | 📁 Other | `Other Files` / `Other Folders` | Everything else |
71
+
72
+ > 💡 **Customizable:** Change folder names, add categories, or override rules in your config file. See [Configuration](#configuration).
73
+
74
+ ---
75
+
76
+ ## 🚀 Installation
77
+
78
+ ### Option 1: **pipx** (Recommended — System-wide, isolated)
79
+
80
+ ```bash
81
+ pipx install downloads-organizer --index-url https://test.pypi.org/simple/
82
+ ```
83
+
84
+ > **Why pipx?** Installs in an isolated environment, makes `downloads-organizer` available globally, and avoids polluting your system Python. Best for CLI tools.
85
+
86
+ #### Installing pipx
87
+
88
+ | Platform | Command |
89
+ | -------- | ------- |
90
+ | **macOS** | `brew install pipx && pipx ensurepath` |
91
+ | **Linux** | `sudo apt install pipx && pipx ensurepath` (or your distro's equivalent) |
92
+ | **Windows** | `pip install pipx && pipx ensurepath` (requires Python + PATH) |
93
+
94
+ After installing pipx, restart your shell, then run the pipx install command above.
95
+
96
+ ---
97
+
98
+ ### Option 2: **pip** (From TestPyPI)
99
+
100
+ ```bash
101
+ pip install downloads-organizer --index-url https://test.pypi.org/simple/ --no-deps
102
+ ```
103
+
104
+ > This package has zero runtime dependencies. `--no-deps` avoids TestPyPI dependency resolution issues.
105
+
106
+ ---
107
+
108
+ ### Option 3: **From Source** (Development)
109
+
110
+ ```bash
111
+ git clone https://github.com/a-endari/downloads-organizer.git
112
+ cd downloads-organizer
113
+ pip install -e .
114
+ ```
115
+
116
+ ---
117
+
118
+ ### Option 4: **pip** (From PyPI — *Coming Soon*)
119
+
120
+ ```bash
121
+ pip install downloads-organizer
122
+ ```
123
+
124
+ ---
125
+
126
+ ## 📖 Quick Start
127
+
128
+ ```bash
129
+ # 1. See what's in your Downloads
130
+ downloads-organizer
131
+
132
+ # 2. Preview changes (dry run)
133
+ downloads-organizer organize --dry-run
134
+
135
+ # 3. Run the organization
136
+ downloads-organizer organize
137
+
138
+ # 4. Organize specific categories only
139
+ downloads-organizer organize --only Documents
140
+ downloads-organizer organize --only Code,Programs
141
+
142
+ # 5. Get help
143
+ downloads-organizer --help
144
+ ```
145
+
146
+ ---
147
+
148
+ ## Configuration
149
+
150
+ Customize folder names, add ignore rules, or create your own categories via a TOML config file.
151
+
152
+ **Config file locations:**
153
+ - **macOS/Linux:** `~/.config/downloads-organizer/config.toml`
154
+ - **Windows:** `%APPDATA%\downloads-organizer\config.toml`
155
+
156
+ **Quick example:**
157
+ ```toml
158
+ [ignore]
159
+ files = [".DS_Store", "desktop.ini", ".gitkeep"]
160
+ directories = ["In_Progress", "Keep_Here"]
161
+
162
+ [categories.documents]
163
+ folder = "My Documents"
164
+ ```
165
+
166
+ 📖 **Full documentation:** [Configuration Guide](docs/configuration.md)
167
+
168
+ ---
169
+
170
+ ## Privacy & Philosophy
171
+
172
+ - **100% offline** — No network calls, ever. Your filenames never leave your machine.
173
+ - **No AI** — Deterministic rules. `tax_return_2024.pdf` always goes to Documents. No hallucinations, no surprises.
174
+ - **No telemetry** — No usage tracking, no analytics, no phone-home.
175
+ - **Safe by default** — Always preview with `--dry-run` first.
176
+ - **Open source** — Read the code, audit the logic, fork it.
177
+
178
+ I built this for myself because every other tool either phoned home, required a subscription, or tried to be "smart" with AI. This does one thing well.
179
+
180
+ ---
181
+
182
+ ## License
183
+
184
+ MIT License — use it, fork it, modify it freely.
185
+
186
+ See [LICENSE](LICENSE) for details.
187
+
188
+ ---
189
+
190
+ <div align="center">
191
+
192
+ ### Made with 💙 by [a-endari](https://github.com/a-endari)
193
+
194
+ [⭐ Star on GitHub](https://github.com/a-endari/downloads-organizer) • [🐛 Report Issue](https://github.com/a-endari/downloads-organizer/issues) • [💬 Start Discussion](https://github.com/a-endari/downloads-organizer/discussions)
195
+
196
+ </div>
File without changes