shubhobm's picture
feat(app): first pass at reporting app, step 2 and 3 functioning
d523c31
"""
Class definitions for AVID report.
"""
from pydantic import BaseModel
from typing import List
from datetime import date
from .components import Affects, Problemtype, Metric, Reference, LangValue, Impact
class ReportMetadata(BaseModel):
"""Metadata class for a report."""
report_id: str
class Report(BaseModel):
"""Top-level class to store an AVID report."""
data_type: str = 'AVID'
"""Namespace for the report. Set to AVID by default, change this only if you're adopting these datamodels to stand up your own vulnerability database."""
data_version: str = None
"""Latest version of the data."""
metadata: ReportMetadata = None
"""Metadata for the report."""
affects: Affects = None
"""Information on Artifact(s) affected by this report."""
problemtype: Problemtype = None
"""Description of the problem a report is concerned with."""
metrics: List[Metric] = None
"""Quantitative results pertaining to the issues raised in a specific report."""
references: List[Reference] = None
"""References and their details."""
description: LangValue = None
"""High-level description."""
impact: Impact = None
"""Impact information, e.g. different taxonomy mappings, harm and severity scores."""
credit: List[LangValue] = None
"""People credited for this report."""
reported_date: date = None
"""Date reported."""
def save(self, location):
"""Save a report as a json file.
Parameters
----------
location : str
output *.json filename including location.
"""
with open(location, "w") as outfile:
outfile.write(self.json(indent=4))