ae-dlo 0.6.5__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.
- ae_dlo-0.6.5.dist-info/METADATA +212 -0
- ae_dlo-0.6.5.dist-info/RECORD +15 -0
- ae_dlo-0.6.5.dist-info/WHEEL +4 -0
- ae_dlo-0.6.5.dist-info/entry_points.txt +4 -0
- ae_dlo-0.6.5.dist-info/licenses/LICENSE +21 -0
- downloads_organizer/__init__.py +0 -0
- downloads_organizer/__main__.py +4 -0
- downloads_organizer/cli.py +462 -0
- downloads_organizer/config.py +230 -0
- downloads_organizer/constants.py +10 -0
- downloads_organizer/main.py +9 -0
- downloads_organizer/models.py +58 -0
- downloads_organizer/organizer.py +210 -0
- downloads_organizer/rules.py +215 -0
- downloads_organizer/templates/config.toml +87 -0
|
@@ -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
|
+
[](https://python.org)
|
|
24
|
+
[](LICENSE)
|
|
25
|
+
[](#-quick-start)
|
|
26
|
+
[](#-privacy--philosophy)
|
|
27
|
+
[](https://github.com/a-endari/downloads-organizer/stargazers)
|
|
28
|
+
[](https://test.pypi.org/project/downloads-organizer/)
|
|
29
|
+
[](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
|
+

|
|
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>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
downloads_organizer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
+
downloads_organizer/__main__.py,sha256=Vdhw8YA1K3wPMlbJQYL5WqvRzAKVeZ16mZQFO9VRmCo,62
|
|
3
|
+
downloads_organizer/cli.py,sha256=J1hDKQUHntomgtnveAieUGzFsC3D5HOEW9PMBKcV6tc,13039
|
|
4
|
+
downloads_organizer/config.py,sha256=zSzCk7kvtydz7hUUnVFkMdbC3BTgPhohuLjrXm43_oY,7081
|
|
5
|
+
downloads_organizer/constants.py,sha256=onpZoJXVsH8O25UAF7v2wBiIJF3nQqjtYO6BfIERQiI,186
|
|
6
|
+
downloads_organizer/main.py,sha256=kZwR_ws-qwYgV1n8WQE1ZqtMj3k307frglCQaB3jCbs,117
|
|
7
|
+
downloads_organizer/models.py,sha256=FHCxjXc5Y7EY8YaM6B3GVhIzrFF-vDkYzKs-VT6HKgI,1400
|
|
8
|
+
downloads_organizer/organizer.py,sha256=jL9SYEnIq8pm8MOnjwqfdivIdWyTGgW4nTGb2ReZspQ,6335
|
|
9
|
+
downloads_organizer/rules.py,sha256=CVmvIJvbCduBtuAJfehotBrUeNIAI9z926XScPwALHk,4874
|
|
10
|
+
downloads_organizer/templates/config.toml,sha256=BRnmLZ7vi9IpDxK9w7JTUaxTPZK0BuVmLB_-0ZuQIhI,2288
|
|
11
|
+
ae_dlo-0.6.5.dist-info/METADATA,sha256=dzcHl8DZJpSfWi-8GrPFCzidjbkvxG-UYoWusBJ3Y-c,7225
|
|
12
|
+
ae_dlo-0.6.5.dist-info/WHEEL,sha256=2iZrJkDIkeDh0k9SikKMqFuRP-ua6mb4Ir1AsER4BEw,87
|
|
13
|
+
ae_dlo-0.6.5.dist-info/entry_points.txt,sha256=gCbxKOv-93_6LUUscXqExgsziaEgAcs7P_bAk0ngARs,145
|
|
14
|
+
ae_dlo-0.6.5.dist-info/licenses/LICENSE,sha256=XTRjv2-a5IWuUceYmnORfhrfhWRrhAaeJsoFAwxLORw,1069
|
|
15
|
+
ae_dlo-0.6.5.dist-info/RECORD,,
|
|
@@ -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.
|
|
File without changes
|