Skip to content

Commit b6e80c1

Browse files
committed
Fix --gist argument failure
This change fixes --gist argument which was raising a traceback. Also adds a unit test of the condition where --gist is specified but GITHUB_TOKEN is undefined. Signed-off-by: Eric Brown <eric.brown@securesauce.dev>
1 parent 6351796 commit b6e80c1

7 files changed

Lines changed: 32 additions & 9 deletions

File tree

precli/cli/main.py

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
from precli.core import loader
2323
from precli.core.artifact import Artifact
2424
from precli.core.run import Run
25+
from precli.renderers import Renderer
2526

2627

2728
BUSL_URL = "https://spdx.org/licenses/BUSL-1.1.html"
@@ -174,6 +175,11 @@ def setup_arg_parser():
174175
f"file or directory: '{target}'"
175176
)
176177

178+
if args.gist and not os.getenv("GITHUB_TOKEN"):
179+
parser.error(
180+
f"argument --gist: environment variable GITHUB_TOKEN undefined"
181+
)
182+
177183
return args
178184

179185

@@ -214,15 +220,8 @@ def discover_files(targets: list[str], recursive: bool) -> list[Artifact]:
214220
return artifacts
215221

216222

217-
def create_gist(file, renderer: str):
218-
if renderer == "json":
219-
filename = "results.json"
220-
elif renderer == "plain":
221-
filename = "results.txt"
222-
elif renderer == "markdown":
223-
filename = "results.md"
224-
elif renderer == "detailed":
225-
filename = "results.txt"
223+
def create_gist(file, renderer: Renderer):
224+
filename = f"results.{renderer.file_extension()}"
226225

227226
with open(file.name, encoding="utf-8") as f:
228227
file_content = f.read()

precli/renderers/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ def __init__(self, console: Console, quiet: bool):
1212
self.console = console
1313
self.quiet = quiet
1414

15+
@abstractmethod
16+
def file_extension(self) -> str:
17+
pass
18+
1519
@abstractmethod
1620
def render(self, run: Run):
1721
pass

precli/renderers/detailed.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212

1313

1414
class Detailed(Renderer):
15+
def file_extension(self) -> str:
16+
return ".txt"
17+
1518
def render(self, run: Run):
1619
for result in run.results:
1720
if result.level == Level.ERROR:

precli/renderers/json.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,9 @@ def get_extensions(self) -> list:
131131
)
132132
return precli_exts
133133

134+
def file_extension(self) -> str:
135+
return ".json"
136+
134137
def render(self, run: Run):
135138
log = sarif_om.SarifLog(
136139
schema_uri=SCHEMA_URI,

precli/renderers/markdown.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@
1616

1717

1818
class Markdown(Renderer):
19+
def file_extension(self) -> str:
20+
return ".md"
21+
1922
def render(self, run: Run):
2023
output = ""
2124
for result in run.results:

precli/renderers/plain.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99

1010

1111
class Plain(Renderer):
12+
def file_extension(self) -> str:
13+
return ".txt"
14+
1215
def render(self, run: Run):
1316
for result in run.results:
1417
rule = Rule.get_by_id(result.rule_id)

tests/unit/cli/test_main.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,14 @@ def test_main_more_than_one_renderer(self, monkeypatch, capsys):
8686
captured = capsys.readouterr()
8787
assert "not allowed with argument" in captured.err
8888

89+
def test_main_gist_no_github_token(self, monkeypatch, capsys):
90+
monkeypatch.setattr("sys.argv", ["precli", ".", "--gist"])
91+
with pytest.raises(SystemExit) as excinfo:
92+
main.main()
93+
assert excinfo.value.code == 2
94+
captured = capsys.readouterr()
95+
assert "environment variable GITHUB_TOKEN undefined" in captured.err
96+
8997
def test_main_version(self, monkeypatch, capsys):
9098
monkeypatch.setattr("sys.argv", ["precli", "--version"])
9199
with pytest.raises(SystemExit) as excinfo:

0 commit comments

Comments
 (0)