Skip to content

Commit 14efd0d

Browse files
authored
Update URLs, Lint (#540)
1 parent a6de00f commit 14efd0d

3 files changed

Lines changed: 48 additions & 23 deletions

File tree

safety/errors.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,16 @@
11
from typing import Optional
2-
from safety.constants import EXIT_CODE_EMAIL_NOT_VERIFIED, EXIT_CODE_FAILURE, EXIT_CODE_INVALID_API_KEY, EXIT_CODE_TOO_MANY_REQUESTS, \
3-
EXIT_CODE_UNABLE_TO_FETCH_VULNERABILITY_DB, EXIT_CODE_UNABLE_TO_LOAD_LOCAL_VULNERABILITY_DB, EXIT_CODE_MALFORMED_DB, \
4-
EXIT_CODE_INVALID_PROVIDED_REPORT, EXIT_CODE_INVALID_REQUIREMENT
2+
3+
from safety.constants import (
4+
EXIT_CODE_EMAIL_NOT_VERIFIED,
5+
EXIT_CODE_FAILURE,
6+
EXIT_CODE_INVALID_API_KEY,
7+
EXIT_CODE_INVALID_PROVIDED_REPORT,
8+
EXIT_CODE_INVALID_REQUIREMENT,
9+
EXIT_CODE_MALFORMED_DB,
10+
EXIT_CODE_TOO_MANY_REQUESTS,
11+
EXIT_CODE_UNABLE_TO_FETCH_VULNERABILITY_DB,
12+
EXIT_CODE_UNABLE_TO_LOAD_LOCAL_VULNERABILITY_DB,
13+
)
514

615

716
class SafetyException(Exception):
@@ -83,7 +92,7 @@ class InvalidCredentialError(DatabaseFetchError):
8392

8493
def __init__(self, credential: Optional[str] = None, message="Your authentication credential{credential}is invalid. See {link}.", reason=None):
8594
self.credential = credential
86-
self.link = 'https://bit.ly/3OY2wEI'
95+
self.link = 'https://docs.safetycli.com/safety-docs/support/invalid-api-key-error'
8796
self.message = message.format(credential=f" '{self.credential}' ", link=self.link) if self.credential else message.format(credential=' ', link=self.link)
8897
info = f" Reason: {reason}"
8998
self.message = self.message + (info if reason else "")

tests/test_cli.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
import json
22
import os
3-
from pathlib import Path
43
import shutil
54
import tempfile
65
import unittest
76
from datetime import datetime
8-
from packaging.version import Version
9-
from packaging.specifiers import SpecifierSet
10-
from unittest.mock import patch, Mock
7+
from pathlib import Path
8+
from unittest.mock import Mock, patch
119

1210
import click
1311
from click.testing import CliRunner
12+
from packaging.specifiers import SpecifierSet
13+
from packaging.version import Version
1414

1515
from safety import cli
16-
from safety.models import Vulnerability, CVE, Severity, SafetyRequirement
16+
from safety.models import CVE, SafetyRequirement, Severity, Vulnerability
1717
from safety.util import Package, SafetyContext
1818

1919

@@ -70,7 +70,7 @@ def setUp(self):
7070
self.output_options = ['screen', 'text', 'json', 'bare']
7171
self.dirname = os.path.dirname(__file__)
7272

73-
def test_command_line_interface(self):
73+
def test_command_line_interface(self):
7474
runner = CliRunner()
7575
result = runner.invoke(cli.cli)
7676
expected = "Usage: cli [OPTIONS] COMMAND [ARGS]..."
@@ -234,7 +234,7 @@ def test_validate_with_basic_policy_file(self):
234234
"cvss_severity": [
235235
"critical",
236236
"high",
237-
"medium",
237+
"medium",
238238
],
239239
"exploitability": [
240240
"critical",
@@ -330,7 +330,7 @@ def test_check_with_fix_does_verify_api_key(self):
330330
req_file = os.path.join(dirname, "test_fix", "basic", "reqs_simple.txt")
331331
result = self.runner.invoke(cli.cli, ['check', '-r', req_file, '--apply-security-updates'])
332332
self.assertEqual(click.unstyle(result.stderr),
333-
"The --apply-security-updates option needs authentication. See https://bit.ly/3OY2wEI.\n")
333+
"The --apply-security-updates option needs authentication. See https://docs.safetycli.com/safety-docs/support/invalid-api-key-error.\n")
334334
self.assertEqual(result.exit_code, 65)
335335

336336
def test_check_with_fix_only_works_with_files(self):

tests/test_safety.py

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,19 +19,35 @@
1919
from unittest.mock import Mock, patch
2020

2121
import click as click
22-
from packaging.version import parse
2322
from packaging.specifiers import SpecifierSet
23+
from packaging.version import parse
2424
from requests.exceptions import RequestException
25+
2526
from safety.auth import build_client_session
2627
from safety.constants import DB_CACHE_FILE
27-
28-
from safety.errors import DatabaseFetchError, DatabaseFileNotFoundError, MalformedDatabase, InvalidCredentialError, TooManyRequestsError
28+
from safety.errors import (
29+
DatabaseFetchError,
30+
DatabaseFileNotFoundError,
31+
InvalidCredentialError,
32+
MalformedDatabase,
33+
TooManyRequestsError,
34+
)
2935
from safety.formatter import SafetyFormatter
3036
from safety.models import CVE, Package, SafetyRequirement
31-
from safety.safety import get_announcements, ignore_vuln_if_needed, get_closest_ver, precompute_remediations, compute_sec_ver, \
32-
calculate_remediations, read_vulnerabilities, check, get_licenses, review
37+
from safety.safety import (
38+
calculate_remediations,
39+
check,
40+
compute_sec_ver,
41+
get_announcements,
42+
get_closest_ver,
43+
get_licenses,
44+
ignore_vuln_if_needed,
45+
precompute_remediations,
46+
read_vulnerabilities,
47+
review,
48+
)
3349
from safety.util import get_packages_licenses, read_requirements
34-
from tests.resources import VALID_REPORT, VULNS, SCANNED_PACKAGES, REMEDIATIONS
50+
from tests.resources import REMEDIATIONS, SCANNED_PACKAGES, VALID_REPORT, VULNS
3551
from tests.test_cli import get_vulnerability
3652

3753

@@ -140,7 +156,7 @@ def test_check_live(self):
140156
packages = read_requirements(reqs)
141157

142158
vulns, _ = check(
143-
session=self.session,
159+
session=self.session,
144160
packages=packages,
145161
db_mirror=False,
146162
cached=0,
@@ -237,7 +253,7 @@ def test_get_packages_licenses_without_api_key(self):
237253
telemetry=False
238254
)
239255
db_generic_exception = error.exception
240-
self.assertEqual(str(db_generic_exception), 'Your authentication credential is invalid. See https://bit.ly/3OY2wEI.')
256+
self.assertEqual(str(db_generic_exception), 'Your authentication credential is invalid. See https://docs.safetycli.com/safety-docs/support/invalid-api-key-error.')
241257

242258

243259
def test_get_packages_licenses_with_invalid_api_key(self):
@@ -459,7 +475,7 @@ def test_get_announcements_catch_unhandled_http_codes(self, get_used_options):
459475
api_key = "somekey"
460476
session.api_key = api_key
461477
session.headers = {'X-Api-Key': api_key}
462-
session.get.return_value = mock
478+
session.get.return_value = mock
463479

464480
self.assertEqual(get_announcements(session), [])
465481

@@ -511,7 +527,7 @@ def test_get_announcements_wrong_json_response_handling(self, get_used_options):
511527
api_key = "somekey"
512528
session.api_key = api_key
513529
session.headers = {'X-Api-Key': api_key}
514-
session.get.return_value = mock
530+
session.get.return_value = mock
515531

516532
self.assertEqual(get_announcements(session), [])
517533

@@ -524,7 +540,7 @@ def test_get_announcements_wrong_json_response_handling(self, get_used_options):
524540
api_key = "somekey"
525541
session.api_key = api_key
526542
session.headers = {'X-Api-Key': api_key}
527-
session.get.return_value = mock
543+
session.get.return_value = mock
528544

529545
self.assertEqual(get_announcements(session), [])
530546

0 commit comments

Comments
 (0)