Spaces:
Running
Running
| """ | |
| Component data classes used in AVID report and vulnerability datamodels. | |
| """ | |
| from typing import Dict, List, Optional | |
| from pydantic import BaseModel | |
| from .enums import * | |
| class LangValue(BaseModel): | |
| """Generic class to store a string with its language specified.""" | |
| lang: str | |
| value: str | |
| class Artifact(BaseModel): | |
| """Type and name of an affected artifact.""" | |
| type: ArtifactTypeEnum | |
| name: str | |
| class Detection(BaseModel): | |
| """Method to detect a specific issue.""" | |
| type: MethodEnum | |
| name: str | |
| class Affects(BaseModel): | |
| """Information on Artifact(s) affected by this report.""" | |
| developer: List[str] | |
| deployer: List[str] | |
| artifacts: List[Artifact] | |
| class Problemtype(BaseModel): | |
| """Description of the problem a report/vuln is concerned with.""" | |
| classof: ClassEnum | |
| type: Optional[TypeEnum] | |
| description: LangValue | |
| class Metric(BaseModel): | |
| """Quantification of the issue in a specific report.""" | |
| name: str | |
| detection_method: Detection | |
| results: Dict | |
| class Reference(BaseModel): | |
| """Details for a reference of a report/vulnerability.""" | |
| type: Optional[str] | |
| label: str | |
| url: str # AnyUrl is a better fit, but keeping this because submissions are not standard yet | |
| class Config: # type is excluded if None | |
| fields = {'type': {'exclude': True}} | |
| class AvidTaxonomy(BaseModel): | |
| """AVID taxonomy mappings of a report/vulnerability.""" | |
| vuln_id: Optional[str] | |
| risk_domain: List[str] | |
| sep_view: List[SepEnum] | |
| lifecycle_view: List[LifecycleEnum] | |
| taxonomy_version: str | |
| class Config: # vuln_id is excluded if None | |
| fields = {'vuln_id': {'exclude': True}} | |
| class Impact(BaseModel): | |
| """Impact information of a report/vulnerability, e.g. different taxonomy mappings, harm and severity scores.""" | |
| avid: AvidTaxonomy |