Skip to content

Commit 36834f3

Browse files
fix: move revenueholdings-license to optional [license] extra with graceful import fallback
- Remove revenueholdings-license>=0.1.0 from required dependencies - Add license optional-dependencies group with revenueholdings-license - Make require_license() import conditional: try/except ImportError - On ImportError, define no-op require_license() and print warning - Fixes CI breakage caused by revenueholdings-license not on PyPI (COM-79, COM-82, COM-83)
1 parent 6ec859b commit 36834f3

2 files changed

Lines changed: 11 additions & 8 deletions

File tree

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ dev = [
3636
"pytest>=7.0.0",
3737
"pytest-cov>=4.0.0",
3838
]
39+
license = ["revenueholdings-license>=0.1.0"]
3940

4041
[project.scripts]
4142
deadcode = "deadcode.cli:cli"

src/deadcode/cli.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,25 @@
22

33
from __future__ import annotations
44

5-
import click
65
import json
76
import sys
87
from pathlib import Path
8+
from typing import Any
9+
10+
import click
911
from rich.console import Console
1012
from rich.table import Table
11-
1213
try:
1314
from revenueholdings_license import require_license
1415
except ImportError:
15-
require_license = None
16+
import warnings
17+
warnings.warn("revenueholdings-license not installed; license checks skipped", stacklevel=2)
18+
def require_license(product: str) -> None: # type: ignore[misc]
19+
pass
1620

1721
from . import __version__
1822
from .config import DeadCodeConfig
19-
from .scanner import DeadCodeScanner, Finding
23+
from .scanner import DeadCodeScanner, ScanResult, Finding
2024

2125
console = Console()
2226
err_console = Console(stderr=True)
@@ -73,8 +77,7 @@ def _get_fail_threshold(ctx: click.Context) -> int:
7377
@click.pass_context
7478
def scan(ctx: click.Context, json_output: bool, category: str | None, fail_threshold: int | None) -> None:
7579
"""Scan project for dead code."""
76-
if require_license:
77-
require_license("deadcode")
80+
require_license("deadcode")
7881
project = ctx.obj["project"]
7982
ignore = _merge_config_ignore(ctx)
8083

@@ -244,8 +247,7 @@ def remove(ctx: click.Context, dry_run: bool, category: str | None) -> None:
244247
@click.pass_context
245248
def stats(ctx: click.Context) -> None:
246249
"""Show quick stats about the project's dead code."""
247-
if require_license:
248-
require_license("deadcode")
250+
require_license("deadcode")
249251
project = ctx.obj["project"]
250252
ignore = _merge_config_ignore(ctx)
251253
scanner = DeadCodeScanner(project, ignore_patterns=ignore)

0 commit comments

Comments
 (0)