pipscope 0.1.0__py3-none-any.whl → 0.1.1__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.
- {pipscope-0.1.0.dist-info → pipscope-0.1.1.dist-info}/METADATA +6 -4
- pipscope-0.1.1.dist-info/RECORD +5 -0
- pipscope.py +21 -2
- pipscope-0.1.0.dist-info/RECORD +0 -5
- {pipscope-0.1.0.dist-info → pipscope-0.1.1.dist-info}/WHEEL +0 -0
- {pipscope-0.1.0.dist-info → pipscope-0.1.1.dist-info}/entry_points.txt +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pipscope
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.1
|
|
4
4
|
Summary: Interactive TUI for exploring installed Python packages
|
|
5
|
-
Project-URL: Homepage, https://
|
|
6
|
-
Project-URL: Repository, https://github.com/
|
|
7
|
-
Author-email:
|
|
5
|
+
Project-URL: Homepage, https://pypi.org/project/pipscope
|
|
6
|
+
Project-URL: Repository, https://github.com/nityanandmathur/pipscope
|
|
7
|
+
Author-email: Nityanand Mathur <nityanandmathur@gmail.com>, Ankit Bari <vbari8527@gmail.com>
|
|
8
8
|
License-Expression: MIT
|
|
9
9
|
Keywords: packages,pip,terminal,textual,tui
|
|
10
10
|
Classifier: Development Status :: 4 - Beta
|
|
@@ -72,6 +72,8 @@ python pipscope.py
|
|
|
72
72
|
| `Esc` | Clear search, return to list |
|
|
73
73
|
| `s` | Toggle sort: name / version |
|
|
74
74
|
| `e` | Export packages to JSON |
|
|
75
|
+
| `h` | Show Environment Health |
|
|
76
|
+
| `r` | Export requirements.txt |
|
|
75
77
|
| `q` | Quit |
|
|
76
78
|
|
|
77
79
|
## Interface
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
pipscope.py,sha256=-cOqkzczobZ7nkeQRP3dK40U5ZoERMxSJoweYuSSTpE,18582
|
|
2
|
+
pipscope-0.1.1.dist-info/METADATA,sha256=9hmoU0LLKEpSawHRZzliqyaJMXvxJC-bpyf7uFz7ldc,4369
|
|
3
|
+
pipscope-0.1.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
4
|
+
pipscope-0.1.1.dist-info/entry_points.txt,sha256=HPAurFrbg3hi00N5B9a-icxgm0sLhPkk7VCep74bxVI,43
|
|
5
|
+
pipscope-0.1.1.dist-info/RECORD,,
|
pipscope.py
CHANGED
|
@@ -18,6 +18,9 @@ from dataclasses import dataclass, field
|
|
|
18
18
|
from datetime import datetime
|
|
19
19
|
from importlib.metadata import distributions
|
|
20
20
|
|
|
21
|
+
from services.health import analyze_environment
|
|
22
|
+
from services.req_exporter import export_requirements
|
|
23
|
+
|
|
21
24
|
from textual import on
|
|
22
25
|
from textual.app import App, ComposeResult
|
|
23
26
|
from textual.binding import Binding
|
|
@@ -26,6 +29,7 @@ from textual.message import Message
|
|
|
26
29
|
from textual.reactive import reactive
|
|
27
30
|
from textual.widgets import Input, ListItem, ListView, Static
|
|
28
31
|
|
|
32
|
+
from ui.health_screen import HealthScreen
|
|
29
33
|
|
|
30
34
|
# -----------------------------------------------------------------------------
|
|
31
35
|
# Data Model
|
|
@@ -368,6 +372,8 @@ class PipScope(App):
|
|
|
368
372
|
Binding("escape", "escape_action", "Back", show=False),
|
|
369
373
|
Binding("s", "toggle_sort", "Sort", show=False),
|
|
370
374
|
Binding("e", "export_json", "Export", show=False),
|
|
375
|
+
Binding("r", "export_requirements", "requirements.txt", show=False),
|
|
376
|
+
Binding("h", "show_health", "Health", show=False),
|
|
371
377
|
]
|
|
372
378
|
|
|
373
379
|
TITLE = "pipscope"
|
|
@@ -407,7 +413,9 @@ class PipScope(App):
|
|
|
407
413
|
"[#5e6ad2]j/k[/] [#6e6e80]Navigate[/] "
|
|
408
414
|
"[#5e6ad2]s[/] [#6e6e80]Sort[/] "
|
|
409
415
|
"[#5e6ad2]e[/] [#6e6e80]Export[/] "
|
|
410
|
-
"[#5e6ad2]q[/] [#6e6e80]Quit[/]"
|
|
416
|
+
"[#5e6ad2]q[/] [#6e6e80]Quit[/] "
|
|
417
|
+
"[#5e6ad2]h[/] [#6e6e80]Health[/] "
|
|
418
|
+
"[#5e6ad2]r[/] [#6e6e80]Health[/] ",
|
|
411
419
|
id="footer"
|
|
412
420
|
)
|
|
413
421
|
|
|
@@ -527,7 +535,6 @@ class PipScope(App):
|
|
|
527
535
|
self._apply_filter()
|
|
528
536
|
|
|
529
537
|
self.notify(f"Sorted by {self.sort_mode}", timeout=1.5)
|
|
530
|
-
|
|
531
538
|
def action_export_json(self) -> None:
|
|
532
539
|
"""Export all packages to JSON file."""
|
|
533
540
|
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
|
|
@@ -554,6 +561,18 @@ class PipScope(App):
|
|
|
554
561
|
except Exception as e:
|
|
555
562
|
self.notify(f"Export failed: {e}", severity="error", timeout=3)
|
|
556
563
|
|
|
564
|
+
def action_show_health(self) -> None:
|
|
565
|
+
"""Analyze and show environment health summary."""
|
|
566
|
+
self.push_screen(HealthScreen(self._all_packages))
|
|
567
|
+
|
|
568
|
+
def action_export_requirements(self) -> None:
|
|
569
|
+
"""Export packages to requirements.txt."""
|
|
570
|
+
try:
|
|
571
|
+
export_requirements(self._all_packages)
|
|
572
|
+
self.notify(f"Exported to requirements.txt", timeout=2)
|
|
573
|
+
except Exception as e:
|
|
574
|
+
self.notify(f"Export failed: {e}", severity="error", timeout=3)
|
|
575
|
+
pass
|
|
557
576
|
|
|
558
577
|
def main() -> None:
|
|
559
578
|
"""Entry point for the application."""
|
pipscope-0.1.0.dist-info/RECORD
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
pipscope.py,sha256=y4VXBtCFpG12tJKCIZW9mly2Inm7w5Bjzqp2WbvFU0k,17687
|
|
2
|
-
pipscope-0.1.0.dist-info/METADATA,sha256=Umupibo0gftw83a0Hr0k4sboGenS7Pvbch9apLpE6G0,4254
|
|
3
|
-
pipscope-0.1.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
4
|
-
pipscope-0.1.0.dist-info/entry_points.txt,sha256=HPAurFrbg3hi00N5B9a-icxgm0sLhPkk7VCep74bxVI,43
|
|
5
|
-
pipscope-0.1.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|