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.
@@ -1,10 +1,10 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pipscope
3
- Version: 0.1.0
3
+ Version: 0.1.1
4
4
  Summary: Interactive TUI for exploring installed Python packages
5
- Project-URL: Homepage, https://github.com/yourusername/pipscope
6
- Project-URL: Repository, https://github.com/yourusername/pipscope
7
- Author-email: Your Name <you@example.com>
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."""
@@ -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,,