| 629 | |
| 630 | @classmethod |
| 631 | def from_dict(cls, advisory_data): |
| 632 | date_published = advisory_data["date_published"] |
| 633 | transformed = { |
| 634 | "aliases": advisory_data["aliases"], |
| 635 | "summary": advisory_data["summary"], |
| 636 | "affected_packages": [ |
| 637 | AffectedPackage.from_dict(pkg) |
| 638 | for pkg in advisory_data["affected_packages"] |
| 639 | if pkg is not None |
| 640 | ], |
| 641 | "references": [Reference.from_dict(ref) for ref in advisory_data["references"]], |
| 642 | "date_published": ( |
| 643 | datetime.datetime.fromisoformat(date_published) if date_published else None |
| 644 | ), |
| 645 | "weaknesses": advisory_data["weaknesses"], |
| 646 | "url": advisory_data.get("url") or None, |
| 647 | } |
| 648 | return cls(**transformed) |
| 649 | |
| 650 | |
| 651 | @dataclasses.dataclass(order=True) |