Skip to content

Commit a20c1cf

Browse files
committed
Bulk rename DataSource -> Importer
The name DataSource and Importer were majorly used interchangeably although they represent the same concept. Also, the importers now require a mandatory ``spdx_license_expression`` to run Signed-off-by: Hritik Vijay <hritikxx8@gmail.com>
1 parent 744259b commit a20c1cf

70 files changed

Lines changed: 367 additions & 471 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

vulnerabilities/fixtures/github.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@
9696
"name": "github",
9797
"license": "",
9898
"last_run": "2021-03-06T09:09:01.523Z",
99-
"data_source": "GitHubAPIDataSource",
99+
"data_source": "GitHubAPIImporter",
100100
"data_source_cfg": {
101101
"endpoint": "https://api.github.com/graphql",
102102
"ecosystems": [
@@ -115,4 +115,4 @@
115115
"reference": 136
116116
}
117117
}
118-
]
118+
]

vulnerabilities/fixtures/openssl.json

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -40538,7 +40538,7 @@
4053840538
"name": "rust",
4053940539
"license": "cc0-1.0",
4054040540
"last_run": "2020-09-14T12:47:17.451Z",
40541-
"data_source": "RustDataSource",
40541+
"data_source": "RustImporter",
4054240542
"data_source_cfg": {
4054340543
"branch": null,
4054440544
"repository_url": "https://github.com/RustSec/advisory-db",
@@ -40555,7 +40555,7 @@
4055540555
"name": "alpine",
4055640556
"license": "",
4055740557
"last_run": null,
40558-
"data_source": "AlpineDataSource",
40558+
"data_source": "AlpineImporter",
4055940559
"data_source_cfg": {
4056040560
"branch": null,
4056140561
"repository_url": "https://gitlab.alpinelinux.org/alpine/infra/alpine-secdb"
@@ -40569,7 +40569,7 @@
4056940569
"name": "archlinux",
4057040570
"license": "mit",
4057140571
"last_run": null,
40572-
"data_source": "ArchlinuxDataSource",
40572+
"data_source": "ArchlinuxImporter",
4057340573
"data_source_cfg": {
4057440574
"archlinux_tracker_url": "https://security.archlinux.org/json"
4057540575
}
@@ -40582,7 +40582,7 @@
4058240582
"name": "debian",
4058340583
"license": "mit",
4058440584
"last_run": null,
40585-
"data_source": "DebianDataSource",
40585+
"data_source": "DebianImporter",
4058640586
"data_source_cfg": {
4058740587
"debian_tracker_url": "https://security-tracker.debian.org/tracker/data/json"
4058840588
}
@@ -40595,7 +40595,7 @@
4059540595
"name": "safetydb",
4059640596
"license": "cc-by-nc-4.0",
4059740597
"last_run": null,
40598-
"data_source": "SafetyDbDataSource",
40598+
"data_source": "SafetyDbImporter",
4059940599
"data_source_cfg": {
4060040600
"url": "https://raw.githubusercontent.com/pyupio/safety-db/master/data/insecure_full.json",
4060140601
"etags": {}
@@ -40609,7 +40609,7 @@
4060940609
"name": "npm",
4061040610
"license": "mit",
4061140611
"last_run": null,
40612-
"data_source": "NpmDataSource",
40612+
"data_source": "NpmImporter",
4061340613
"data_source_cfg": {
4061440614
"repository_url": "https://github.com/nodejs/security-wg.git"
4061540615
}
@@ -40622,7 +40622,7 @@
4062240622
"name": "ruby",
4062340623
"license": "",
4062440624
"last_run": null,
40625-
"data_source": "RubyDataSource",
40625+
"data_source": "RubyImporter",
4062640626
"data_source_cfg": {
4062740627
"repository_url": "https://github.com/rubysec/ruby-advisory-db.git"
4062840628
}
@@ -40635,7 +40635,7 @@
4063540635
"name": "ubuntu",
4063640636
"license": "gpl-2.0",
4063740637
"last_run": null,
40638-
"data_source": "UbuntuDataSource",
40638+
"data_source": "UbuntuImporter",
4063940639
"data_source_cfg": {
4064040640
"etags": {},
4064140641
"releases": [
@@ -40655,7 +40655,7 @@
4065540655
"name": "retiredotnet",
4065640656
"license": "mit",
4065740657
"last_run": null,
40658-
"data_source": "RetireDotnetDataSource",
40658+
"data_source": "RetireDotnetImporter",
4065940659
"data_source_cfg": {
4066040660
"repository_url": "https://github.com/RetireNet/Packages.git"
4066140661
}
@@ -40668,7 +40668,7 @@
4066840668
"name": "suse_backports",
4066940669
"license": "",
4067040670
"last_run": null,
40671-
"data_source": "SUSEBackportsDataSource",
40671+
"data_source": "SUSEBackportsImporter",
4067240672
"data_source_cfg": {
4067340673
"url": "http://ftp.suse.com/pub/projects/security/yaml/",
4067440674
"etags": {}
@@ -40682,7 +40682,7 @@
4068240682
"name": "debian_oval",
4068340683
"license": "",
4068440684
"last_run": null,
40685-
"data_source": "DebianOvalDataSource",
40685+
"data_source": "DebianOvalImporter",
4068640686
"data_source_cfg": {
4068740687
"etags": {},
4068840688
"releases": [
@@ -40701,7 +40701,7 @@
4070140701
"name": "redhat",
4070240702
"license": "cc-by-4.0",
4070340703
"last_run": null,
40704-
"data_source": "RedhatDataSource",
40704+
"data_source": "RedhatImporter",
4070540705
"data_source_cfg": {}
4070640706
}
4070740707
},
@@ -40712,7 +40712,7 @@
4071240712
"name": "gentoo",
4071340713
"license": "",
4071440714
"last_run": null,
40715-
"data_source": "GentooDataSource",
40715+
"data_source": "GentooImporter",
4071640716
"data_source_cfg": {
4071740717
"repository_url": "https://anongit.gentoo.org/git/data/glsa.git"
4071840718
}
@@ -40725,7 +40725,7 @@
4072540725
"name": "openssl",
4072640726
"license": "",
4072740727
"last_run": "2020-09-14T12:52:58.762Z",
40728-
"data_source": "OpenSSLDataSource",
40728+
"data_source": "OpenSSLImporter",
4072940729
"data_source_cfg": {
4073040730
"etags": {
4073140731
"https://www.openssl.org/news/vulnerabilities.xml": "\"513bd-5aee0a1c716f0-gzip\""
@@ -40740,7 +40740,7 @@
4074040740
"name": "ubuntu_usn",
4074140741
"license": "gpl-2.0",
4074240742
"last_run": null,
40743-
"data_source": "UbuntuUSNDataSource",
40743+
"data_source": "UbuntuUSNImporter",
4074440744
"data_source_cfg": {
4074540745
"etags": {},
4074640746
"db_url": "https://usn.ubuntu.com/usn-db/database-all.json.bz2"
@@ -40754,7 +40754,7 @@
4075440754
"name": "github",
4075540755
"license": "",
4075640756
"last_run": null,
40757-
"data_source": "GitHubAPIDataSource",
40757+
"data_source": "GitHubAPIImporter",
4075840758
"data_source_cfg": {
4075940759
"endpoint": "https://api.github.com/graphql",
4076040760
"ecosystems": [
@@ -40765,4 +40765,4 @@
4076540765
}
4076640766
}
4076740767
}
40768-
]
40768+
]

vulnerabilities/import_runner.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@
3131

3232
from vulnerabilities import models
3333
from vulnerabilities.models import Advisory
34-
from vulnerabilities.data_source import AdvisoryData
35-
from vulnerabilities.data_source import DataSource
34+
from vulnerabilities.importer import AdvisoryData
35+
from vulnerabilities.importer import Importer
3636

3737
logger = logging.getLogger(__name__)
3838

@@ -48,7 +48,7 @@ class ImportRunner:
4848
- No valid data from the data source must be skipped or truncated.
4949
"""
5050

51-
def __init__(self, importer: DataSource):
51+
def __init__(self, importer: Importer):
5252
self.importer = importer
5353

5454
def run(self) -> None:
@@ -60,9 +60,7 @@ def run(self) -> None:
6060
logger.info(f"Starting import for {importer_name}")
6161
advisory_datas = importer_class().advisory_data()
6262
count = process_advisories(advisory_datas=advisory_datas, importer_name=importer_name)
63-
logger.info(
64-
f"Finished import for {importer_name}. Imported {count} advisories."
65-
)
63+
logger.info(f"Finished import for {importer_name}. Imported {count} advisories.")
6664

6765

6866
def process_advisories(advisory_datas: Iterable[AdvisoryData], importer_name: str) -> List:
Lines changed: 10 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -212,22 +212,22 @@ def __post_init__(self):
212212
logger.warn(f"AdvisoryData with no tzinfo: {self!r}")
213213

214214

215-
class NoLicenseWarning(Warning):
215+
class NoLicenseError(Exception):
216216
pass
217217

218218

219-
class DataSource:
219+
class Importer:
220220
"""
221-
A DataSource collects data from various upstreams and returns corresponding
221+
An Importer collects data from various upstreams and returns corresponding
222222
AdvisoryData objects in its advisory_data method.
223223
Subclass this class to implement an importer
224224
"""
225225

226-
license = ""
226+
spdx_license_expression = ""
227227

228228
def __init__(self):
229-
if not self.license:
230-
warnings.warn(f"Running importer {self!r} without a license", NoLicenseWarning)
229+
if not self.spdx_license_expression:
230+
raise Exception(f"Cannot run importer {self!r} without a license")
231231

232232
@classmethod
233233
@property
@@ -245,23 +245,8 @@ def advisory_data(self) -> Iterable[AdvisoryData]:
245245
raise NotImplementedError
246246

247247

248-
# TODO: Adopt the same design as that for DataSource
249-
class DataSourceConfiguration:
250-
pass
251-
252-
253-
@dataclasses.dataclass
254-
class GitDataSourceConfiguration(DataSourceConfiguration):
255-
repository_url: str
256-
branch: Optional[str] = None
257-
create_working_directory: bool = True
258-
remove_working_directory: bool = True
259-
working_directory: Optional[str] = None
260-
261-
262-
class GitDataSource(DataSource):
263-
CONFIG_CLASS = GitDataSourceConfiguration
264-
248+
# TODO: Needs rewrite
249+
class GitImporter(Importer):
265250
def validate_configuration(self) -> None:
266251

267252
if not self.config.create_working_directory and self.config.working_directory is None:
@@ -449,7 +434,8 @@ def _include_file(
449434
return match
450435

451436

452-
class OvalDataSource(DataSource):
437+
# TODO: Needs rewrite
438+
class OvalImporter(Importer):
453439
"""
454440
All data sources which collect data from OVAL files must inherit from this
455441
`OvalDataSource` class. Subclasses must implement the methods `_fetch` and `set_api`.

vulnerabilities/importers/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,6 @@
2121
# Visit https://github.com/nexB/vulnerablecode/ for support and download.
2222
from vulnerabilities.importers import nginx
2323

24-
IMPORTERS = [nginx.NginxDataSource]
24+
IMPORTERS = [nginx.NginxImporter]
2525

2626
IMPORTER_REGISTRY = {x.qualified_name: x for x in IMPORTERS}

vulnerabilities/importers/alpine_linux.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,15 @@
2929
import saneyaml
3030
from bs4 import BeautifulSoup
3131

32-
from vulnerabilities.data_source import Advisory
33-
from vulnerabilities.data_source import DataSource
34-
from vulnerabilities.data_source import Reference
32+
from vulnerabilities.importer import Advisory
33+
from vulnerabilities.importer import Importer
34+
from vulnerabilities.importer import Reference
3535
from vulnerabilities.helpers import is_cve
3636

3737
BASE_URL = "https://secdb.alpinelinux.org/"
3838

3939

40-
class AlpineDataSource(DataSource):
40+
class AlpineImporter(Importer):
4141
@staticmethod
4242
def fetch_advisory_links():
4343
index_page = BeautifulSoup(requests.get(BASE_URL).content, features="lxml")

vulnerabilities/importers/apache_httpd.py

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -30,24 +30,17 @@
3030
from univers.versions import SemverVersion
3131
from univers.version_specifier import VersionSpecifier
3232

33-
from vulnerabilities.data_source import Advisory
34-
from vulnerabilities.data_source import DataSource
35-
from vulnerabilities.data_source import DataSourceConfiguration
36-
from vulnerabilities.data_source import Reference
37-
from vulnerabilities.data_source import VulnerabilitySeverity
33+
from vulnerabilities.importer import Advisory
34+
from vulnerabilities.importer import Importer
35+
from vulnerabilities.importer import Reference
36+
from vulnerabilities.importer import VulnerabilitySeverity
3837
from vulnerabilities.package_managers import GitHubTagsAPI
3938
from vulnerabilities.severity_systems import scoring_systems
4039
from vulnerabilities.helpers import nearest_patched_package
4140

4241

43-
@dataclasses.dataclass
44-
class ApacheHTTPDDataSourceConfiguration(DataSourceConfiguration):
45-
etags: dict
42+
class ApacheHTTPDImporter(Importer):
4643

47-
48-
class ApacheHTTPDDataSource(DataSource):
49-
50-
CONFIG_CLASS = ApacheHTTPDDataSourceConfiguration
5144
base_url = "https://httpd.apache.org/security/json/"
5245

5346
def set_api(self):

vulnerabilities/importers/apache_kafka.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,17 +28,17 @@
2828
from univers.versions import MavenVersion
2929
from univers.version_specifier import VersionSpecifier
3030

31-
from vulnerabilities.data_source import Advisory
32-
from vulnerabilities.data_source import DataSource
33-
from vulnerabilities.data_source import Reference
31+
from vulnerabilities.importer import Advisory
32+
from vulnerabilities.importer import Importer
33+
from vulnerabilities.importer import Reference
3434
from vulnerabilities.package_managers import GitHubTagsAPI
3535
from vulnerabilities.helpers import nearest_patched_package
3636

3737
GH_PAGE_URL = "https://raw.githubusercontent.com/apache/kafka-site/asf-site/cve-list.html"
3838
ASF_PAGE_URL = "https://kafka.apache.org/cve-list"
3939

4040

41-
class ApacheKafkaDataSource(DataSource):
41+
class ApacheKafkaImporter(Importer):
4242
@staticmethod
4343
def fetch_advisory_page():
4444
page = requests.get(GH_PAGE_URL)

vulnerabilities/importers/apache_tomcat.py

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -32,23 +32,16 @@
3232
from univers.versions import SemverVersion
3333
from packageurl import PackageURL
3434

35-
from vulnerabilities.data_source import Advisory
36-
from vulnerabilities.data_source import DataSource
37-
from vulnerabilities.data_source import DataSourceConfiguration
38-
from vulnerabilities.data_source import Reference
35+
from vulnerabilities.importer import Advisory
36+
from vulnerabilities.importer import Importer
37+
from vulnerabilities.importer import Reference
3938
from vulnerabilities.helpers import create_etag
4039
from vulnerabilities.helpers import nearest_patched_package
4140
from vulnerabilities.package_managers import MavenVersionAPI
4241

4342

44-
@dataclasses.dataclass
45-
class ApacheTomcatDataSourceConfiguration(DataSourceConfiguration):
46-
etags: dict
43+
class ApacheTomcatImporter(Importer):
4744

48-
49-
class ApacheTomcatDataSource(DataSource):
50-
51-
CONFIG_CLASS = ApacheTomcatDataSourceConfiguration
5245
base_url = "https://tomcat.apache.org/security-{}"
5346

5447
def __init__(self, *args, **kwargs):

0 commit comments

Comments
 (0)