Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -68,5 +68,5 @@ jobs:
- name: Verify PyPI upload
run: |
echo "✓ Package published to PyPI"
echo "Install with: pip install logview"
echo "Package URL: https://pypi.org/project/logview/"
echo "Install with: pip install logview-ag"
echo "Package URL: https://pypi.org/project/logview-ag/"
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Added
- **Docker Container Log Support**: View logs from Docker containers
- New `DockerLogSource` adapter implementing LogSource protocol
- Optional dependency: `pip install logview[docker]`
- Optional dependency: `pip install logview-ag[docker]`
- Supports both JSON and plain text Docker log formats
- Automatic severity inference from log messages
- Rich container metadata extraction (image, labels, status)
Expand Down
6 changes: 3 additions & 3 deletions DOCKER.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ This follows the same pattern as `LoggingClientProtocol` in the GCP adapter, mak
1. **Optional Docker SDK dependency**:
- Check if `docker` package is available
- Raise `DockerNotInstalledError` with helpful message if missing
- Support installation via `pip install logview[docker]`
- Support installation via `pip install logview-ag[docker]`

2. **Container resolution**:
- Accept container name or ID
Expand Down Expand Up @@ -281,7 +281,7 @@ Add to `pyproject.toml`:
docker = ["docker>=7.0.0"]
```

Install with: `pip install logview[docker]`
Install with: `pip install logview-ag[docker]`

### Why Optional?

Expand All @@ -303,7 +303,7 @@ class DockerNotInstalledError(DockerError):
def __init__(self):
super().__init__(
"Docker support requires the docker package. "
"Install with: pip install logview[docker]"
"Install with: pip install logview-ag[docker]"
)

class DockerDaemonError(DockerError):
Expand Down
2 changes: 1 addition & 1 deletion PLAN.md
Original file line number Diff line number Diff line change
Expand Up @@ -892,7 +892,7 @@ pipx install logview
```bash
pip install logview
# With GCP/GKE support
pip install logview[all]
pip install logview-ag[all]
```

**Method 4: From Source**
Expand Down
34 changes: 17 additions & 17 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# LogView

[![CI](https://github.com/agileguy/logview/actions/workflows/ci.yml/badge.svg)](https://github.com/agileguy/logview/actions/workflows/ci.yml)
[![PyPI version](https://img.shields.io/pypi/v/logview.svg)](https://pypi.org/project/logview/)
[![Python](https://img.shields.io/pypi/pyversions/logview.svg)](https://pypi.org/project/logview/)
[![PyPI version](https://img.shields.io/pypi/v/logview-ag.svg)](https://pypi.org/project/logview-ag/)
[![Python](https://img.shields.io/pypi/pyversions/logview-ag.svg)](https://pypi.org/project/logview-ag/)

A testable, responsive log viewer TUI with pluggable log source contexts.

Expand All @@ -21,38 +21,38 @@ A testable, responsive log viewer TUI with pluggable log source contexts.

## Installation

[![PyPI version](https://img.shields.io/pypi/v/logview.svg)](https://pypi.org/project/logview/)
[![PyPI version](https://img.shields.io/pypi/v/logview-ag.svg)](https://pypi.org/project/logview-ag/)

### Quick Install (Recommended)

```bash
# Using pipx (isolated environment - recommended)
pipx install logview
pipx install logview-ag

# Or using pip
pip install logview
pip install logview-ag
```

### With Optional Dependencies

```bash
# Base installation (local logs only)
pip install logview
pip install logview-ag

# With GCP Cloud Logging support
pip install logview[gcp]
pip install logview-ag[gcp]

# With GKE support
pip install logview[gke]
pip install logview-ag[gke]

# With Docker support
pip install logview[docker]
pip install logview-ag[docker]

# With context detection (auto-discover GCP/GKE)
pip install logview[detection]
pip install logview-ag[detection]

# With everything
pip install logview[all]
pip install logview-ag[all]
```

#### From Source (Development)
Expand Down Expand Up @@ -82,7 +82,7 @@ curl -fsSL https://github.com/agileguy/logview/releases/download/vX.Y.Z/SHA256SU
sha256sum -c SHA256SUMS --ignore-missing
```

Expected output: `logview-X.Y.Z-py3-none-any.whl: OK`
Expected output: `logview_ag-X.Y.Z-py3-none-any.whl: OK`

### Uninstall

Expand All @@ -91,8 +91,8 @@ Expected output: `logview-X.Y.Z-py3-none-any.whl: OK`
curl -fsSL https://raw.githubusercontent.com/agileguy/logview/main/install.sh | bash -s -- --uninstall

# Or manually
pipx uninstall logview # if installed with pipx
pip uninstall logview # if installed with pip
pipx uninstall logview-ag # if installed with pipx
pip uninstall logview-ag # if installed with pip

# Remove configuration (optional)
rm -rf ~/.config/logview
Expand Down Expand Up @@ -224,7 +224,7 @@ To view logs from Docker containers:

1. **Install with Docker support**:
```bash
pipx install logview[docker] # or pip install logview[docker]
pipx install logview-ag[docker] # or pip install logview-ag[docker]
```

2. **Ensure Docker is running**:
Expand Down Expand Up @@ -271,7 +271,7 @@ To use GCP Cloud Logging as a log source:

1. **Install with GCP support**:
```bash
pipx install logview[all] # or pip install logview[all]
pipx install logview-ag[all] # or pip install logview-ag[all]
```

2. **Authenticate with GCP**:
Expand Down Expand Up @@ -305,7 +305,7 @@ with Kubernetes-specific resource filters.

1. **Install with GCP support** (same as GCP Cloud Logging):
```bash
pipx install logview[all] # or pip install logview[all]
pipx install logview-ag[all] # or pip install logview-ag[all]
```

2. **Authenticate with GCP**:
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[project]
name = "logview"
name = "logview-ag"
dynamic = ["version"]
description = "A testable, responsive log viewer TUI with pluggable log source contexts"
readme = "README.md"
Expand Down
4 changes: 2 additions & 2 deletions src/logview/adapters/context_detector.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
Application Default Credentials (ADC).

Requires optional dependencies:
pip install logview[detection]
pip install logview-ag[detection]
"""

from __future__ import annotations
Expand Down Expand Up @@ -55,7 +55,7 @@ class DetectionNotInstalledError(ContextDetectionError):
def __init__(self) -> None:
super().__init__(
"Context detection requires additional dependencies. "
"Install with: pip install logview[detection]"
"Install with: pip install logview-ag[detection]"
)


Expand Down
4 changes: 2 additions & 2 deletions src/logview/adapters/docker.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"""Docker container log adapter.

Requires the docker package:
pip install logview[docker]
pip install logview-ag[docker]
"""

from __future__ import annotations
Expand Down Expand Up @@ -48,7 +48,7 @@ class DockerNotInstalledError(DockerError):
def __init__(self) -> None:
super().__init__(
"Docker support requires the docker package. "
"Install with: pip install logview[docker]"
"Install with: pip install logview-ag[docker]"
)


Expand Down
4 changes: 2 additions & 2 deletions src/logview/adapters/gcp.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"""GCP Cloud Logging adapter.

Requires the google-cloud-logging package:
pip install logview[gcp]
pip install logview-ag[gcp]
"""

from __future__ import annotations
Expand Down Expand Up @@ -52,7 +52,7 @@ class GCPNotInstalledError(GCPError):
def __init__(self) -> None:
super().__init__(
"GCP support requires the google-cloud-logging package. "
"Install with: pip install logview[gcp]"
"Install with: pip install logview-ag[gcp]"
)


Expand Down
2 changes: 1 addition & 1 deletion src/logview/adapters/gke.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
This adapter queries Cloud Logging with k8s-specific resource filters.

Requires the google-cloud-logging package:
pip install logview[gcp]
pip install logview-ag[gcp]
"""

from __future__ import annotations
Expand Down
8 changes: 4 additions & 4 deletions src/logview/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -365,7 +365,7 @@ def _create_source_from_context(
elif isinstance(context, GCPContext):
if not GCP_AVAILABLE:
self.notify(
"GCP support requires: pip install logview[gcp]",
"GCP support requires: pip install logview-ag[gcp]",
severity="warning",
)
return None
Expand All @@ -378,7 +378,7 @@ def _create_source_from_context(
elif isinstance(context, GKEContext):
if not GCP_AVAILABLE:
self.notify(
"GKE support requires: pip install logview[gcp]",
"GKE support requires: pip install logview-ag[gcp]",
severity="warning",
)
return None
Expand All @@ -392,7 +392,7 @@ def _create_source_from_context(
elif isinstance(context, DockerContext):
if not DOCKER_AVAILABLE:
self.notify(
"Docker support requires: pip install logview[docker]",
"Docker support requires: pip install logview-ag[docker]",
severity="warning",
)
return None
Expand Down Expand Up @@ -747,7 +747,7 @@ def action_discover_contexts(self) -> None:
if not DETECTION_AVAILABLE:
self.notify(
"Context detection requires additional dependencies.\n"
"Install with: pip install logview[detection]",
"Install with: pip install logview-ag[detection]",
severity="error",
timeout=10,
)
Expand Down
2 changes: 1 addition & 1 deletion src/logview/ui/screens/discovery.py
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ def compose(self) -> ComposeResult:
"Ensure you have:\n"
"1. Run: gcloud auth application-default login\n"
"2. Access to at least one GCP project\n"
"3. Installed detection libraries: pip install logview[detection]",
"3. Installed detection libraries: pip install logview-ag[detection]",
classes="discovery-empty",
)
else:
Expand Down
4 changes: 2 additions & 2 deletions tests/integration/test_gcp.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"""Integration tests for GCP Cloud Logging adapter.

These tests require:
1. google-cloud-logging package installed: pip install logview[gcp]
1. google-cloud-logging package installed: pip install logview-ag[gcp]
2. GCP authentication configured: gcloud auth application-default login
3. A valid GCP project with Cloud Logging API enabled

Expand Down Expand Up @@ -167,7 +167,7 @@ class TestGCPWithoutCredentials:
def test_gcp_not_installed_error_message(self) -> None:
"""Test GCPNotInstalledError has helpful message."""
error = GCPNotInstalledError()
assert "pip install logview[gcp]" in str(error)
assert "pip install logview-ag[gcp]" in str(error)

def test_gcp_authentication_error_message(self) -> None:
"""Test GCPAuthenticationError has helpful message."""
Expand Down
4 changes: 2 additions & 2 deletions tests/integration/test_gke.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"""Integration tests for GKE Kubernetes log adapter.

These tests require:
1. google-cloud-logging package installed: pip install logview[gcp]
1. google-cloud-logging package installed: pip install logview-ag[gcp]
2. GCP authentication configured: gcloud auth application-default login
3. A valid GKE cluster with workloads generating logs

Expand Down Expand Up @@ -277,7 +277,7 @@ def test_gke_error_message(self) -> None:
def test_gcp_not_installed_error_message(self) -> None:
"""Test GCPNotInstalledError has helpful message for GKE users."""
error = GCPNotInstalledError()
assert "pip install logview[gcp]" in str(error)
assert "pip install logview-ag[gcp]" in str(error)

def test_gcp_authentication_error_message(self) -> None:
"""Test GCPAuthenticationError has helpful message."""
Expand Down
2 changes: 1 addition & 1 deletion tests/unit/test_docker_adapter.py
Original file line number Diff line number Diff line change
Expand Up @@ -296,7 +296,7 @@ def test_docker_not_installed():
with pytest.raises(DockerNotInstalledError) as exc_info:
DockerLogSource(container="test")

assert "pip install logview[docker]" in str(exc_info.value)
assert "pip install logview-ag[docker]" in str(exc_info.value)


def test_docker_log_source_init():
Expand Down
2 changes: 1 addition & 1 deletion tests/unit/test_gcp_adapter.py
Original file line number Diff line number Diff line change
Expand Up @@ -537,7 +537,7 @@ def test_not_installed_error_message(self) -> None:
"""Test GCPNotInstalledError message."""
error = GCPNotInstalledError()
assert "google-cloud-logging" in str(error)
assert "pip install logview[gcp]" in str(error)
assert "pip install logview-ag[gcp]" in str(error)

def test_authentication_error_default_message(self) -> None:
"""Test GCPAuthenticationError default message."""
Expand Down