def __init__(self, id, name, threat, **kwargs):
        """
        :param id: OpenVas plugin ID
        :type id: basestring

        :param name: Vulnerability name
        :type name: str
        
        :param threat: threat type: Log, Low, Middle...
        :type threat: str
        
        :param cves: list of CVEs
        :type cves: list(str)
        
        :param cvss: CVSS number value 
        :type cvss: float
        
        :param description: vulnerability description 
        :type description: basestring
        
        :param references: list of references 
        :type references: list(str)
        
        :param level: vulnerability level, as text: log, info, low... 
        :type level: basestring

        :param family: Vulnerability family
        :type family: str

        :raises: TypeError, ValueError
        """
        # Get info
        cves = kwargs.get("cves", [])
        cvss = kwargs.get("cvss", -1.0)
        description = kwargs.get("description", "")
        references = kwargs.get("references", [])
        level = kwargs.get("level", "low")
        family = kwargs.get("family", "unknown")

        if not isinstance(id, str):
            raise TypeError("Expected basestring, got '%s' instead" % type(id))
        if not isinstance(name, str):
            raise TypeError("Expected basestring, got '%s' instead" % type(name))
        if not isinstance(threat, str):
            raise TypeError("Expected basestring, got '%s' instead" % type(threat))
        if not isinstance(family, str):
            raise TypeError("Expected basestring, got '%s' instead" % type(family))
        if not isinstance(cves, list):
            raise TypeError("Expected list, got '%s' instead" % type(cves))
        else:
            for x in cves:
                if not isinstance(x, str):
                    raise TypeError("Expected basestring, got '%s' instead" % type(x))

        if not isinstance(cvss, (float, int)):
            raise TypeError("Expected float, got '%s' instead" % type(cvss))
        if description is not None:
            if not isinstance(description, str):
                raise TypeError("Expected basestring, got '%s' instead" % type(description))
        else:
            description = name

        if not isinstance(references, list):
            raise TypeError("Expected list, got '%s' instead" % type(references))
        else:
            for x in references:
                if not isinstance(x, str):
                    raise TypeError("Expected basestring, got '%s' instead" % type(x))

        if not isinstance(level, str):
            raise TypeError("Expected basestring, got '%s' instead" % type(level))

        # --------------------------------------------------------------------------
        # Adjust description
        # --------------------------------------------------------------------------
        # Adjust text
        description = re.sub("([\n\r]*[\s]*[Ss]ummary[:]*[\n\r\s]*)", "", description)
        description = re.sub("[\w][\r\n][\w]", "", description)

        self.id = id
        self.name = name
        self.cves = cves
        self.cvss = float(cvss)
        self.description = description
        self.references = references
        self.level = level
        self.threat = threat
        self.family = family

        # Hosts
        self.hosts = []

    # ----------------------------------------------------------------------
dataset/ETHPy150Open cr0hn/openvas_to_report/openvas_to_report/libs/data/parsed_data.py/Vulnerability.__init__/original