reclaimed 0.1.2__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 (40) hide show
  1. reclaimed-0.1.2/.gitignore +82 -0
  2. reclaimed-0.1.2/CONTRIBUTING.md +112 -0
  3. reclaimed-0.1.2/LICENSE +29 -0
  4. reclaimed-0.1.2/PKG-INFO +163 -0
  5. reclaimed-0.1.2/README.md +105 -0
  6. reclaimed-0.1.2/__init__.py +0 -0
  7. reclaimed-0.1.2/implementation_plan.md +241 -0
  8. reclaimed-0.1.2/model=anthropic/claude-3-7-sonnet-20250219 +0 -0
  9. reclaimed-0.1.2/model=anthropic/trim_whitespace.py +98 -0
  10. reclaimed-0.1.2/pyproject.toml +96 -0
  11. reclaimed-0.1.2/reclaim_performance_analysis.md +265 -0
  12. reclaimed-0.1.2/reclaimed/__init__.py +34 -0
  13. reclaimed-0.1.2/reclaimed/__main__.py +6 -0
  14. reclaimed-0.1.2/reclaimed/_version.py +3 -0
  15. reclaimed-0.1.2/reclaimed/cli.py +153 -0
  16. reclaimed-0.1.2/reclaimed/core/__init__.py +24 -0
  17. reclaimed-0.1.2/reclaimed/core/cache.py +145 -0
  18. reclaimed-0.1.2/reclaimed/core/errors.py +55 -0
  19. reclaimed-0.1.2/reclaimed/core/scanner.py +504 -0
  20. reclaimed-0.1.2/reclaimed/core/types.py +50 -0
  21. reclaimed-0.1.2/reclaimed/io/__init__.py +5 -0
  22. reclaimed-0.1.2/reclaimed/io/filesystem.py +206 -0
  23. reclaimed-0.1.2/reclaimed/metrics/__init__.py +141 -0
  24. reclaimed-0.1.2/reclaimed/metrics/buffer.py +222 -0
  25. reclaimed-0.1.2/reclaimed/metrics/collector.py +222 -0
  26. reclaimed-0.1.2/reclaimed/metrics/publisher.py +229 -0
  27. reclaimed-0.1.2/reclaimed/metrics/subscriber.py +186 -0
  28. reclaimed-0.1.2/reclaimed/metrics/types.py +124 -0
  29. reclaimed-0.1.2/reclaimed/metrics/utils.py +208 -0
  30. reclaimed-0.1.2/reclaimed/ui/__init__.py +46 -0
  31. reclaimed-0.1.2/reclaimed/ui/formatters.py +158 -0
  32. reclaimed-0.1.2/reclaimed/ui/styles.py +249 -0
  33. reclaimed-0.1.2/reclaimed/ui/textual_app.py +701 -0
  34. reclaimed-0.1.2/reclaimed/utils/__init__.py +5 -0
  35. reclaimed-0.1.2/reclaimed/utils/formatters.py +103 -0
  36. reclaimed-0.1.2/reclaimed/utils/whitespace.py +156 -0
  37. reclaimed-0.1.2/requirements.txt +6 -0
  38. reclaimed-0.1.2/setup.py +3 -0
  39. reclaimed-0.1.2/tests/conftest.py +75 -0
  40. reclaimed-0.1.2/tests/test_core/test_scanner.py +147 -0
@@ -0,0 +1,82 @@
1
+ .aider*
2
+ # Byte-compiled / optimized / DLL files
3
+ __pycache__/
4
+ *.py[cod]
5
+ *$py.class
6
+
7
+ # Distribution / packaging
8
+ .Python
9
+ build/
10
+ develop-eggs/
11
+ dist/
12
+ downloads/
13
+ eggs/
14
+ .eggs/
15
+ lib/
16
+ lib64/
17
+ parts/
18
+ sdist/
19
+ var/
20
+ wheels/
21
+ *.egg-info/
22
+ .installed.cfg
23
+ *.egg
24
+ MANIFEST
25
+
26
+ # PyInstaller
27
+ *.manifest
28
+ *.spec
29
+
30
+ # Installer logs
31
+ pip-log.txt
32
+ pip-delete-this-directory.txt
33
+
34
+ # Unit test / coverage reports
35
+ htmlcov/
36
+ .tox/
37
+ .nox/
38
+ .coverage
39
+ .coverage.*
40
+ .cache
41
+ nosetests.xml
42
+ coverage.xml
43
+ *.cover
44
+ *.py,cover
45
+ .hypothesis/
46
+ .pytest_cache/
47
+
48
+ # Environments
49
+ .env
50
+ .venv
51
+ env/
52
+ venv/
53
+ ENV/
54
+ env.bak/
55
+ venv.bak/
56
+
57
+ # Editor directories and files
58
+ .idea/
59
+ .vscode/
60
+ *.suo
61
+ *.ntvs*
62
+ *.njsproj
63
+ *.sln
64
+ *.sw?
65
+
66
+ # Textual specific
67
+ *.log
68
+ *.sqlite
69
+
70
+ # macOS
71
+ .DS_Store
72
+
73
+ # mypy
74
+ .mypy_cache/
75
+ .dmypy.json
76
+ dmypy.json
77
+
78
+ # Black
79
+ .blackd
80
+
81
+ # Hatch
82
+ .hatch/
@@ -0,0 +1,112 @@
1
+ # Contributing to Reclaim
2
+
3
+ Thank you for your interest in contributing to Reclaim! This document provides guidelines and instructions for contributing.
4
+
5
+ ## Development Setup
6
+
7
+ 1. Fork and clone the repository:
8
+ ```bash
9
+ git clone https://github.com/yourusername/reclaim.git
10
+ cd reclaim
11
+ ```
12
+
13
+ 2. Install dependencies:
14
+ ```bash
15
+ pip install -r requirements.txt
16
+ ```
17
+
18
+ 3. Create a development environment:
19
+ ```bash
20
+ hatch shell
21
+ ```
22
+
23
+ ## Development Workflow
24
+
25
+ 1. Create a new branch for your feature:
26
+ ```bash
27
+ git checkout -b feature-name
28
+ ```
29
+
30
+ 2. Make your changes and ensure all tests pass:
31
+ ```bash
32
+ hatch run test
33
+ ```
34
+
35
+ 3. Run the full test suite with coverage:
36
+ ```bash
37
+ hatch run test-cov
38
+ ```
39
+
40
+ 4. Run linting checks:
41
+ ```bash
42
+ hatch run lint
43
+ ```
44
+
45
+ 5. Commit your changes:
46
+ ```bash
47
+ git add .
48
+ git commit -m "Description of changes"
49
+ ```
50
+
51
+ 6. Push to your fork:
52
+ ```bash
53
+ git push origin feature-name
54
+ ```
55
+
56
+ 7. Open a Pull Request
57
+
58
+ ## Code Style
59
+
60
+ - We use Black for code formatting
61
+ - Ruff for linting
62
+ - MyPy for type checking
63
+ - All code must be type-annotated
64
+ - Maximum line length is 100 characters
65
+ - Follow PEP 8 guidelines
66
+
67
+ ## Testing
68
+
69
+ - Write tests for all new features
70
+ - Maintain or improve code coverage
71
+ - Tests should be clear and meaningful
72
+ - Use pytest fixtures when appropriate
73
+
74
+ ## Commit Messages
75
+
76
+ - Use clear, descriptive commit messages
77
+ - Start with a verb in the present tense
78
+ - Keep the first line under 50 characters
79
+ - Add details in the commit body if needed
80
+
81
+ ## Pull Requests
82
+
83
+ - Reference any related issues
84
+ - Include a clear description of changes
85
+ - Update documentation if needed
86
+ - Ensure all checks pass
87
+ - Keep changes focused and atomic
88
+
89
+ ## Release Process
90
+
91
+ Releases are automated through GitHub Actions when tags are pushed:
92
+
93
+ 1. Ensure all tests pass on main
94
+ 2. Tag the release:
95
+ ```bash
96
+ git tag -a v0.1.0 -m "Release v0.1.0"
97
+ ```
98
+ 3. Push tags:
99
+ ```bash
100
+ git push --tags
101
+ ```
102
+
103
+ The GitHub Action will automatically:
104
+ - Run all tests
105
+ - Build the package
106
+ - Publish to PyPI
107
+
108
+ ## Questions?
109
+
110
+ Feel free to open an issue for any questions or concerns.
111
+
112
+ Thank you for contributing to Reclaim! 🌟
@@ -0,0 +1,29 @@
1
+ MIT License
2
+
3
+ <<<<<<< HEAD
4
+ Copyright (c) 2024 Your Name
5
+ =======
6
+ Copyright (c) 2025 Taylor Wilsdon
7
+ >>>>>>> 949812349e7e407e382e45959969bb3abdba5af4
8
+
9
+ Permission is hereby granted, free of charge, to any person obtaining a copy
10
+ of this software and associated documentation files (the "Software"), to deal
11
+ in the Software without restriction, including without limitation the rights
12
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13
+ copies of the Software, and to permit persons to whom the Software is
14
+ furnished to do so, subject to the following conditions:
15
+
16
+ <<<<<<< HEAD
17
+ The above copyright notice and permission notice shall be included in all
18
+ =======
19
+ The above copyright notice and this permission notice shall be included in all
20
+ >>>>>>> 949812349e7e407e382e45959969bb3abdba5af4
21
+ copies or substantial portions of the Software.
22
+
23
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
24
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
28
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
29
+ SOFTWARE.
@@ -0,0 +1,163 @@
1
+ Metadata-Version: 2.4
2
+ Name: reclaimed
3
+ Version: 0.1.2
4
+ Summary: A powerful disk usage analyzer with iCloud support
5
+ Project-URL: Homepage, https://github.com/taylorwilsdon/reclaimed
6
+ Project-URL: Repository, https://github.com/taylorwilsdon/reclaimed.git
7
+ Project-URL: Issues, https://github.com/taylorwilsdon/reclaimed/issues
8
+ Author-email: Taylor Wilsdon <taylor@taylorwilsdon.com>
9
+ License: MIT License
10
+
11
+ <<<<<<< HEAD
12
+ Copyright (c) 2024 Your Name
13
+ =======
14
+ Copyright (c) 2025 Taylor Wilsdon
15
+ >>>>>>> 949812349e7e407e382e45959969bb3abdba5af4
16
+
17
+ Permission is hereby granted, free of charge, to any person obtaining a copy
18
+ of this software and associated documentation files (the "Software"), to deal
19
+ in the Software without restriction, including without limitation the rights
20
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
21
+ copies of the Software, and to permit persons to whom the Software is
22
+ furnished to do so, subject to the following conditions:
23
+
24
+ <<<<<<< HEAD
25
+ The above copyright notice and permission notice shall be included in all
26
+ =======
27
+ The above copyright notice and this permission notice shall be included in all
28
+ >>>>>>> 949812349e7e407e382e45959969bb3abdba5af4
29
+ copies or substantial portions of the Software.
30
+
31
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
32
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
33
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
34
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
35
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
36
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
37
+ SOFTWARE.
38
+ License-File: LICENSE
39
+ Keywords: analyzer,cli,disk,icloud,storage
40
+ Classifier: Development Status :: 4 - Beta
41
+ Classifier: Environment :: Console
42
+ Classifier: Intended Audience :: End Users/Desktop
43
+ Classifier: License :: OSI Approved :: MIT License
44
+ Classifier: Operating System :: MacOS :: MacOS X
45
+ Classifier: Operating System :: POSIX :: Linux
46
+ Classifier: Programming Language :: Python :: 3
47
+ Classifier: Programming Language :: Python :: 3.8
48
+ Classifier: Programming Language :: Python :: 3.9
49
+ Classifier: Programming Language :: Python :: 3.10
50
+ Classifier: Programming Language :: Python :: 3.11
51
+ Classifier: Topic :: System :: Systems Administration
52
+ Classifier: Topic :: Utilities
53
+ Requires-Python: >=3.8
54
+ Requires-Dist: click>=8.0.0
55
+ Requires-Dist: rich>=10.0.0
56
+ Requires-Dist: textual>=0.10.0
57
+ Description-Content-Type: text/markdown
58
+
59
+ # reclaimed 🌟
60
+
61
+ A powerful and user-friendly command-line tool for analyzing disk usage, with special handling for iCloud storage on macOS. Quickly find your largest files and directories with a beautiful, color-coded interface. I let aider write the README.md boilerplate and it's all accurate but I'm still not sure how we feel about the emojis... it seems Claude is a colorful gentleman when writing markdown.
62
+
63
+ ![Disk Scanner Demo](demo.gif)
64
+
65
+ <img width="898" alt="image" src="https://github.com/user-attachments/assets/b8c87581-978b-46e4-bf8b-d9e9b2cd5f9b" />
66
+
67
+ ## Features
68
+
69
+ - 🚀 Fast recursive directory scanning, legitimately performant and batches progress updates efficently
70
+ - ☁️ Smart detection of iCloud vs local storage which is nice on the macbook
71
+ - 📊 She pretty (it utilizes the [Textualize/rich](https://github.com/Textualize/rich) library for fancy CLI stylings)
72
+ - 💾 Export results to JSON for further analysis or batch operations
73
+ - ⚡️ Real-time progress indication actually great
74
+ - 🛡️ Graceful handling of permission issues, doesn't freeze like the old diskinventoryx
75
+
76
+ ## Installation
77
+
78
+ ### Prerequisites
79
+
80
+ - Python 3.8 or higher
81
+ - pip (Python package installer)
82
+ - Technically not a venv but if you aren't using a venv you're generally doing python wrong
83
+
84
+ ### Using pip
85
+
86
+ ```bash
87
+ pip install reclaimed
88
+ ```
89
+
90
+ ### From Source
91
+
92
+ ```bash
93
+ git clone https://github.com/taylorwilsdon/reclaimed.git
94
+ cd reclaimed
95
+ pip install -r requirements.txt
96
+ hatch shell
97
+ ```
98
+
99
+ ## Usage
100
+
101
+ Basic usage:
102
+ ```bash
103
+ reclaimed ~/Documents
104
+ ```
105
+
106
+ Advanced options:
107
+ ```bash
108
+ # Show more results
109
+ reclaimed ~/Documents --files 20 --dirs 15
110
+
111
+ # Save results to JSON
112
+ reclaimed ~/Documents --output results.json
113
+ ```
114
+
115
+ ### Options
116
+
117
+ - `PATH`: Directory to scan (default: current directory)
118
+ - `-f, --files N`: Number of largest files to show (default: 10)
119
+ - `-d, --dirs N`: Number of largest directories to show (default: 10)
120
+ - `-o, --output FILE`: Save results to JSON file
121
+
122
+ ## Output
123
+
124
+ The tool provides:
125
+ - A real-time progress indicator showing files scanned and total size
126
+ - Two tables showing the largest files and directories
127
+ - Clear indication of iCloud vs local storage
128
+ - Summary of any access issues encountered
129
+
130
+ ## Development
131
+
132
+ This project uses [Hatch](https://hatch.pypa.io/) for development workflow management.
133
+
134
+ ### Setup Development Environment
135
+
136
+ ```bash
137
+ pip install -r requirements.txt
138
+ hatch shell
139
+ ```
140
+
141
+ ### Common Commands
142
+
143
+ ```bash
144
+ # Run tests
145
+ hatch run test
146
+
147
+ # Run tests with coverage
148
+ hatch run test-cov
149
+
150
+ # Run linting (black, ruff, mypy)
151
+ hatch run lint
152
+
153
+ # Build distribution packages
154
+ hatch build
155
+ ```
156
+
157
+ ## Contributing
158
+
159
+ Contributions are welcome! Please see our [Contributing Guide](CONTRIBUTING.md) for details.
160
+
161
+ ## License
162
+
163
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
@@ -0,0 +1,105 @@
1
+ # reclaimed 🌟
2
+
3
+ A powerful and user-friendly command-line tool for analyzing disk usage, with special handling for iCloud storage on macOS. Quickly find your largest files and directories with a beautiful, color-coded interface. I let aider write the README.md boilerplate and it's all accurate but I'm still not sure how we feel about the emojis... it seems Claude is a colorful gentleman when writing markdown.
4
+
5
+ ![Disk Scanner Demo](demo.gif)
6
+
7
+ <img width="898" alt="image" src="https://github.com/user-attachments/assets/b8c87581-978b-46e4-bf8b-d9e9b2cd5f9b" />
8
+
9
+ ## Features
10
+
11
+ - 🚀 Fast recursive directory scanning, legitimately performant and batches progress updates efficently
12
+ - ☁️ Smart detection of iCloud vs local storage which is nice on the macbook
13
+ - 📊 She pretty (it utilizes the [Textualize/rich](https://github.com/Textualize/rich) library for fancy CLI stylings)
14
+ - 💾 Export results to JSON for further analysis or batch operations
15
+ - ⚡️ Real-time progress indication actually great
16
+ - 🛡️ Graceful handling of permission issues, doesn't freeze like the old diskinventoryx
17
+
18
+ ## Installation
19
+
20
+ ### Prerequisites
21
+
22
+ - Python 3.8 or higher
23
+ - pip (Python package installer)
24
+ - Technically not a venv but if you aren't using a venv you're generally doing python wrong
25
+
26
+ ### Using pip
27
+
28
+ ```bash
29
+ pip install reclaimed
30
+ ```
31
+
32
+ ### From Source
33
+
34
+ ```bash
35
+ git clone https://github.com/taylorwilsdon/reclaimed.git
36
+ cd reclaimed
37
+ pip install -r requirements.txt
38
+ hatch shell
39
+ ```
40
+
41
+ ## Usage
42
+
43
+ Basic usage:
44
+ ```bash
45
+ reclaimed ~/Documents
46
+ ```
47
+
48
+ Advanced options:
49
+ ```bash
50
+ # Show more results
51
+ reclaimed ~/Documents --files 20 --dirs 15
52
+
53
+ # Save results to JSON
54
+ reclaimed ~/Documents --output results.json
55
+ ```
56
+
57
+ ### Options
58
+
59
+ - `PATH`: Directory to scan (default: current directory)
60
+ - `-f, --files N`: Number of largest files to show (default: 10)
61
+ - `-d, --dirs N`: Number of largest directories to show (default: 10)
62
+ - `-o, --output FILE`: Save results to JSON file
63
+
64
+ ## Output
65
+
66
+ The tool provides:
67
+ - A real-time progress indicator showing files scanned and total size
68
+ - Two tables showing the largest files and directories
69
+ - Clear indication of iCloud vs local storage
70
+ - Summary of any access issues encountered
71
+
72
+ ## Development
73
+
74
+ This project uses [Hatch](https://hatch.pypa.io/) for development workflow management.
75
+
76
+ ### Setup Development Environment
77
+
78
+ ```bash
79
+ pip install -r requirements.txt
80
+ hatch shell
81
+ ```
82
+
83
+ ### Common Commands
84
+
85
+ ```bash
86
+ # Run tests
87
+ hatch run test
88
+
89
+ # Run tests with coverage
90
+ hatch run test-cov
91
+
92
+ # Run linting (black, ruff, mypy)
93
+ hatch run lint
94
+
95
+ # Build distribution packages
96
+ hatch build
97
+ ```
98
+
99
+ ## Contributing
100
+
101
+ Contributions are welcome! Please see our [Contributing Guide](CONTRIBUTING.md) for details.
102
+
103
+ ## License
104
+
105
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
File without changes