difflicious 0.1.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,190 @@
1
+ Metadata-Version: 2.4
2
+ Name: difflicious
3
+ Version: 0.1.0
4
+ Summary: A sleek web-based git diff visualization tool for developers
5
+ Project-URL: Homepage, https://github.com/insipid/difflicious
6
+ Project-URL: Repository, https://github.com/insipid/difflicious
7
+ Project-URL: Issues, https://github.com/insipid/difflicious/issues
8
+ Author-email: Drew <noreply@example.com>
9
+ License: MIT
10
+ License-File: LICENSE
11
+ Keywords: development,diff,git,visualization,web
12
+ Classifier: Development Status :: 3 - Alpha
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.9
17
+ Classifier: Programming Language :: Python :: 3.10
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Topic :: Software Development :: Version Control :: Git
21
+ Classifier: Topic :: Text Processing :: General
22
+ Requires-Python: >=3.9
23
+ Requires-Dist: click>=8.0.0
24
+ Requires-Dist: flask>=2.3.0
25
+ Requires-Dist: jinja-partials>=0.2.0
26
+ Requires-Dist: markupsafe>=2.1.0
27
+ Requires-Dist: pygments>=2.17.0
28
+ Requires-Dist: unidiff>=0.7.5
29
+ Provides-Extra: dev
30
+ Requires-Dist: black>=23.0.0; extra == 'dev'
31
+ Requires-Dist: mypy>=1.0.0; extra == 'dev'
32
+ Requires-Dist: pytest-cov>=4.0.0; extra == 'dev'
33
+ Requires-Dist: pytest>=7.0.0; extra == 'dev'
34
+ Requires-Dist: ruff>=0.1.0; extra == 'dev'
35
+ Description-Content-Type: text/markdown
36
+
37
+ # Difflicious
38
+
39
+ A sleek web-based git diff visualization tool used when working locally on branches. Difflicious provides a lightweight local web application that transforms git diffs into an intuitive, interactive experience.
40
+
41
+ ## What is Difflicious?
42
+
43
+ Difflicious is a developer-focused tool that runs locally and provides a beautiful interface for viewing git changes. Instead of squinting at terminal output, you get a clean, searchable, and toggleable view of your work-in-progress changes.
44
+
45
+ Perfect for:
46
+ - Reviewing changes before committing
47
+ - Understanding complex diffs across multiple files
48
+ - Quickly navigating through modifications in your current branch
49
+ - Getting a bird's-eye view of your development progress
50
+
51
+ ## Features
52
+
53
+ - **Side-by-Side Diff Visualization**: Professional-grade side-by-side view with accurate line numbering
54
+ - **Syntax Highlighting**: Beautiful code highlighting for 30+ programming languages using Highlight.js
55
+ - **Intelligent Diff Parsing**: Advanced git diff parser with proper alignment of additions and deletions
56
+ - **Smart UI Controls**: Expand/collapse all buttons with intelligent disabled states
57
+ - **Interactive Interface**: Toggle visibility, search through changes, and filter content
58
+ - **Clean File Paths**: Automatic removal of git diff artifacts (a/, b/ prefixes)
59
+ - **Secure Git Integration**: Safe git command execution with subprocess sanitization
60
+ - **Real-time Status**: Live git repository status and branch information
61
+ - **Modern UI**: Clean Tailwind CSS design with responsive layout
62
+ - **Lightweight**: Minimal infrastructure using Flask backend and Alpine.js frontend
63
+ - **Developer-Friendly**: Designed by developers, for developers
64
+
65
+ ## Installation & Quick Start
66
+
67
+ ### Option 1: Install from PyPI (Recommended)
68
+ ```bash
69
+ # Install via pip
70
+ pip install difflicious
71
+
72
+ # Run the application
73
+ difflicious
74
+
75
+ # Open your browser to localhost:5000
76
+ ```
77
+
78
+ ### Option 2: Docker (Containerized)
79
+ ```bash
80
+ # Pull and run the Docker image
81
+ docker run -p 5000:5000 -v $(pwd):/workspace difflicious/difflicious
82
+
83
+ # Open your browser to localhost:5000
84
+ ```
85
+
86
+ ### Option 3: From Source (Development)
87
+ ```bash
88
+ # Clone the repository
89
+ git clone https://github.com/insipid/difflicious.git
90
+ cd difflicious
91
+
92
+ # Install uv if not already installed
93
+ xoxo
94
+ curl -LsSf https://astral.sh/uv/install.sh | sh
95
+
96
+ # Create virtual environment and install dependencies
97
+ uv sync
98
+
99
+ # Run the application
100
+ uv run difflicious
101
+ ```
102
+
103
+ ## Font Customization
104
+
105
+ Difflicious supports beautiful programming fonts via Google Fonts CDN integration. You can customize the font used for code and diff content.
106
+
107
+ ### Available Fonts
108
+
109
+ - **JetBrains Mono** (default) - Designed specifically for developers
110
+ - **Fira Code** - Popular programming font with ligatures
111
+ - **Source Code Pro** - Adobe's professional programming font
112
+ - **IBM Plex Mono** - Modern, clean monospace design
113
+ - **Roboto Mono** - Google's versatile monospace font
114
+ - **Inconsolata** - Humanist monospace font
115
+
116
+ ### Font Configuration
117
+
118
+ Set the `DIFFLICIOUS_FONT` environment variable to choose your preferred font:
119
+
120
+ ```bash
121
+ # Use Fira Code
122
+ export DIFFLICIOUS_FONT=fira-code
123
+ difflicious
124
+
125
+ # Use Source Code Pro
126
+ export DIFFLICIOUS_FONT=source-code-pro
127
+ difflicious
128
+
129
+ # List all available fonts
130
+ difflicious --list-fonts
131
+ ```
132
+
133
+ ### Available Font Keys
134
+
135
+ - `jetbrains-mono` - JetBrains Mono (default)
136
+ - `fira-code` - Fira Code
137
+ - `source-code-pro` - Source Code Pro
138
+ - `ibm-plex-mono` - IBM Plex Mono
139
+ - `roboto-mono` - Roboto Mono
140
+ - `inconsolata` - Inconsolata
141
+
142
+ ### Disable Google Fonts
143
+
144
+ If you prefer to use system fonts only (no external CDN requests):
145
+
146
+ ```bash
147
+ export DIFFLICIOUS_DISABLE_GOOGLE_FONTS=true
148
+ difflicious
149
+ ```
150
+
151
+ This will fall back to system monospace fonts like SF Mono, Cascadia Code, Monaco, and Consolas.
152
+
153
+ ## Technology Stack
154
+
155
+ - **Backend**: Python Flask for minimal setup and excellent git integration
156
+ - **Frontend**: Alpine.js + vanilla CSS for lightweight, declarative UI
157
+ - **Real-time**: Server-Sent Events for live git status updates
158
+ - **Security**: Proper subprocess sanitization for safe git command execution
159
+ - **Distribution**: Modern Python packaging (PyPI) and Docker containers
160
+ - **Development**: uv for fast Python package management and virtual environments
161
+
162
+ ## Development Status
163
+
164
+ ✅ **Production-ready diff visualization** - Advanced side-by-side interface implemented!
165
+
166
+ ### Completed ✅
167
+ - Modern Python project structure with pyproject.toml and uv
168
+ - Flask backend with comprehensive API endpoints
169
+ - Advanced git diff parser with side-by-side structure
170
+ - Professional side-by-side diff visualization interface
171
+ - Secure git command execution wrapper with subprocess sanitization
172
+ - Interactive Alpine.js frontend with Tailwind CSS styling
173
+ - Comprehensive test suite (28 tests, 73% coverage)
174
+ - Real git integration (status, diff, branch detection, parsing)
175
+
176
+ ### Coming Soon 🚧
177
+ - Docker containerization with uv
178
+ - PyPI package publishing
179
+ - Enhanced syntax highlighting for code content
180
+ - Advanced search and filtering capabilities
181
+ - Keyboard shortcuts and accessibility features
182
+ - Server-Sent Events for real-time updates
183
+
184
+ ## Contributing
185
+
186
+ This project is in early development. More contribution guidelines will be available as the core functionality is completed.
187
+
188
+ ## License
189
+
190
+ MIT License - see LICENSE file for details.
@@ -0,0 +1,32 @@
1
+ difflicious/__init__.py,sha256=Npx_GS-QsbJarHUbaxNcyT6T_XKDlRtO9F4SC7FQtfc,225
2
+ difflicious/app.py,sha256=de27J605UF6vT0dUKnWWTT1jkyGEGfrawolAr5IgWuI,20243
3
+ difflicious/cli.py,sha256=SuzfjxzdePaqTWOSHpBDJIrZizLsWhCAcf6lWQf4EjM,2391
4
+ difflicious/diff_parser.py,sha256=rEa-57Sic-BD1OZwOXIiEwJU24jDi83qg7pvVk7ae-8,17604
5
+ difflicious/dummy_data.json,sha256=PWSdISbuRzgLgc7AGzClItjO7dERXP6XSfkRYUe7huI,2606
6
+ difflicious/git_operations.py,sha256=lTXgCUM1X80xaK34eYnINiceApthNUXFb9viNp9-AYU,37530
7
+ difflicious/services/__init__.py,sha256=Wxhqj5pmwQdjXDEdy2KcbBPZHBvKAAmOH5sK9Q17hvY,51
8
+ difflicious/services/base_service.py,sha256=PunvoJwILcQ14skYhiX6yYRgbj4NflP78up_K0CVkOc,995
9
+ difflicious/services/diff_service.py,sha256=a2xp2QSciM1qvfLuWyACdTaY7IWcmQS5xWfOjbqBfbM,16130
10
+ difflicious/services/exceptions.py,sha256=p74eXZ46O0J-vQ4hFhiIRZbCcQIfPEmLHkcQQbzCc_A,334
11
+ difflicious/services/git_service.py,sha256=dhzmcUMmIFlU3dDrkCkPRbTI_4YBUCSuM6PqDuCZIso,4504
12
+ difflicious/services/syntax_service.py,sha256=OFVLOz0MrVTQDRGrCjmEdLJQnTowKm1-f4jbytiOGEg,5625
13
+ difflicious/services/template_service.py,sha256=lW4wAqp9C1r_ngkhFK1Z-c8mN5QddH2Gn5cPEv9S2kk,15386
14
+ difflicious/static/css/styles.css,sha256=T2UkMMtkYqvAqBjUQhGJ9PzytuIaw1Zd6JX52iozsSI,21866
15
+ difflicious/static/css/tailwind.css,sha256=es_PPn8acfVBJ7keY5sSWkzCg8ezHsW9axbZV0MNfXI,13906
16
+ difflicious/static/css/tailwind.input.css,sha256=CpVsNPuOef8MsdFdgpIdkSmoMs09XPdFCCph7RL31Ao,96
17
+ difflicious/static/js/app.js,sha256=QcpMngfa7wnk2Bg-aePZNcmPhtl496eA797IuMAj3Yg,40375
18
+ difflicious/static/js/diff-interactions.js,sha256=8zNTQCLbhbJL0MXCGQQ_FS35jOmXQoUQ01HzwraRs2M,69315
19
+ difflicious/templates/base.html,sha256=P0NTJmJfNCt3_VH_txEYqjhzVXPTfyJOYAdwegwlxzw,1692
20
+ difflicious/templates/diff_file.html,sha256=pliksc-XKGUpL1Zwhjc1dh_HiBA1Br4ZexPu-B1900c,4469
21
+ difflicious/templates/diff_groups.html,sha256=NZiCzeDZkBQj6uiYS97t24UjIniOvVa58QmR1FN5vbQ,1286
22
+ difflicious/templates/diff_hunk.html,sha256=W8qwPVj1Qjo7TJeyIpmIDOCUQj6y7erRCbjYVmUm1c4,9919
23
+ difflicious/templates/index.html,sha256=Az1P5OyD46ybZo11PtykdsiIQxFOLmPRX7o9eUrpJP4,1947
24
+ difflicious/templates/partials/empty_state.html,sha256=P7wwG5avrOwB5gHEQLvw2QHesXRWRw8Z9JbyJYIOSdo,1263
25
+ difflicious/templates/partials/global_controls.html,sha256=qx0YoVjENZKH0svE381HLMrauTTPSqjeE7Hejw4HPbQ,1535
26
+ difflicious/templates/partials/loading_state.html,sha256=r8ZqoeFfkmZFwH4Ruj7wXabbJk0PgMYtwbSy9yGZqdc,297
27
+ difflicious/templates/partials/toolbar.html,sha256=xXUoDBhViqmf5zZwZPC4pr5uHXejo9h-RIj8-uRyZ24,10818
28
+ difflicious-0.1.0.dist-info/METADATA,sha256=wCzldABrBxK_m-tTerR6pQLccQVDiG05dtW2B2A_6FQ,6731
29
+ difflicious-0.1.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
30
+ difflicious-0.1.0.dist-info/entry_points.txt,sha256=uU-dNhvVWb2ZcD5nmY6rA9TmwLnMZTQ9qDmtZKhEavY,53
31
+ difflicious-0.1.0.dist-info/licenses/LICENSE,sha256=yx9XSSR3ZKKrTqInWDAsvszNXnaiy-w85vb2A5iodMc,1067
32
+ difflicious-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.27.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ difflicious = difflicious.cli:main
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Drew Amato
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.