Coverage for turvallisuusneuvonta/csaf/csaf.py: 73.68%
17 statements
« prev ^ index » next coverage.py v7.0.3, created at 2023-01-07 19:14 +0100
« prev ^ index » next coverage.py v7.0.3, created at 2023-01-07 19:14 +0100
1"""CSAF Document model."""
2from __future__ import annotations
4from typing import Annotated, List, Optional, no_type_check
6from pydantic import BaseModel, Field, validator
8from turvallisuusneuvonta.csaf.document import Document
9from turvallisuusneuvonta.csaf.product import ProductTree
10from turvallisuusneuvonta.csaf.vulnerability import Vulnerability
13class CSAF(BaseModel):
14 """
15 Representation of security advisory information as a JSON document.
16 """
18 document: Annotated[
19 Document,
20 Field(
21 description='Captures the meta-data about this document describing a particular set of'
22 ' security advisories.',
23 title='Document level meta-data',
24 ),
25 ]
26 product_tree: Annotated[
27 Optional[ProductTree],
28 Field(
29 description='Is a container for all fully qualified product names that can be referenced elsewhere'
30 ' in the document.',
31 title='Product tree',
32 ),
33 ]
34 vulnerabilities: Annotated[
35 Optional[List[Vulnerability]],
36 Field(
37 description='Represents a list of all relevant vulnerability information items.',
38 min_items=1,
39 title='Vulnerabilities',
40 ),
41 ]
43 @no_type_check
44 @validator('vulnerabilities')
45 @classmethod
46 def check_len(cls, v):
47 if not v:
48 raise ValueError('vulnerabilities present but empty')
49 return v