Skip to content

Commit 97e8106

Browse files
committed
feat(client): add all_secrets option to content_scan and multi_content_scan
1 parent 90a4f88 commit 97e8106

File tree

3 files changed

+27
-10
lines changed

3 files changed

+27
-10
lines changed

changelog.d/20241014_101918_mathias.millet_handle_excluded_policy_breaks.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ Uncomment the section that is right (remove the HTML comment wrapper).
1919

2020
### Changed
2121

22+
- `content_scan` and `multi_content_scan` now accept `all_secrets` parameter.
2223
- `PolicyBreak` now contains two new fields: `is_excluded` and `exclude_reason`.
2324
<!--
2425

pygitguardian/client.py

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -357,6 +357,7 @@ def content_scan(
357357
self,
358358
document: str,
359359
filename: Optional[str] = None,
360+
all_secrets: Optional[bool] = None,
360361
extra_headers: Optional[Dict[str, str]] = None,
361362
) -> Union[Detail, ScanResult]:
362363
"""
@@ -368,6 +369,7 @@ def content_scan(
368369
:param filename: name of file, example: "intro.py"
369370
:param document: content of file
370371
:param extra_headers: additional headers to add to the request
372+
:param all_secrets: indicates whether all secrets should be returned
371373
:return: Detail or ScanResult response and status code
372374
"""
373375

@@ -379,6 +381,9 @@ def content_scan(
379381
DocumentSchema.validate_size(
380382
request_obj, self.secret_scan_preferences.maximum_document_size
381383
)
384+
params = {}
385+
if all_secrets is not None:
386+
params["all_secrets"] = all_secrets
382387

383388
resp = self.post(
384389
endpoint="scan",
@@ -401,6 +406,7 @@ def multi_content_scan(
401406
documents: List[Dict[str, str]],
402407
extra_headers: Optional[Dict[str, str]] = None,
403408
ignore_known_secrets: Optional[bool] = None,
409+
all_secrets: Optional[bool] = None,
404410
) -> Union[Detail, MultiScanResult]:
405411
"""
406412
multi_content_scan handles the /multiscan endpoint of the API.
@@ -413,6 +419,7 @@ def multi_content_scan(
413419
example: [{"document":"example content","filename":"intro.py"}]
414420
:param extra_headers: additional headers to add to the request
415421
:param ignore_known_secrets: indicates whether known secrets should be ignored
422+
:param all_secrets: indicates whether all secrets should be returned
416423
:return: Detail or ScanResult response and status code
417424
"""
418425
max_documents = self.secret_scan_preferences.maximum_documents_per_scan
@@ -433,11 +440,13 @@ def multi_content_scan(
433440
document, self.secret_scan_preferences.maximum_document_size
434441
)
435442

436-
params = (
437-
{"ignore_known_secrets": ignore_known_secrets}
438-
if ignore_known_secrets
439-
else {}
440-
)
443+
params = {}
444+
if ignore_known_secrets is not None:
445+
params["ignore_known_secrets"] = ignore_known_secrets
446+
if all_secrets is not None:
447+
params["all_secrets"] = all_secrets
448+
449+
print("PARAMS", params)
441450
resp = self.post(
442451
endpoint="multiscan",
443452
data=request_obj,

tests/test_client.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -575,19 +575,25 @@ def test_extra_headers(
575575

576576

577577
@responses.activate
578-
def test_multiscan_parameters(
579-
client: GGClient,
580-
):
578+
@pytest.mark.parametrize("ignore_known_secrets", (None, True, False))
579+
@pytest.mark.parametrize("all_secrets", (None, True, False))
580+
def test_multiscan_parameters(client: GGClient, ignore_known_secrets, all_secrets):
581581
"""
582582
GIVEN a ggclient
583583
WHEN calling multi_content_scan with parameters
584584
THEN the parameters are passed in the request
585585
"""
586586

587+
to_match = {}
588+
if ignore_known_secrets is not None:
589+
to_match["ignore_known_secrets"] = ignore_known_secrets
590+
if all_secrets is not None:
591+
to_match["all_secrets"] = all_secrets
592+
587593
mock_response = responses.post(
588594
url=client._url_from_endpoint("multiscan", "v1"),
589595
status=200,
590-
match=[matchers.query_param_matcher({"ignore_known_secrets": True})],
596+
match=[matchers.query_param_matcher(to_match)],
591597
json=[
592598
{
593599
"policy_break_count": 1,
@@ -610,7 +616,8 @@ def test_multiscan_parameters(
610616

611617
client.multi_content_scan(
612618
[{"filename": FILENAME, "document": DOCUMENT}],
613-
ignore_known_secrets=True,
619+
ignore_known_secrets=ignore_known_secrets,
620+
all_secrets=all_secrets,
614621
)
615622

616623
assert mock_response.call_count == 1

0 commit comments

Comments
 (0)