Build context with preloaded QuerySets and minimize redundant queries.
(self, **kwargs)
| 651 | ) |
| 652 | |
| 653 | def get_context_data(self, **kwargs): |
| 654 | """ |
| 655 | Build context with preloaded QuerySets and minimize redundant queries. |
| 656 | """ |
| 657 | context = super().get_context_data(**kwargs) |
| 658 | advisory = self.object |
| 659 | |
| 660 | # Pre-fetch and process data in Python instead of the template |
| 661 | weaknesses_present_in_db = [ |
| 662 | weakness_object |
| 663 | for weakness_object in advisory.weaknesses.all() |
| 664 | if weakness_object.weakness |
| 665 | ] |
| 666 | |
| 667 | valid_severities = ( |
| 668 | self.object.severities.exclude(scoring_system=EPSS.identifier) |
| 669 | .filter(scoring_elements__isnull=False, scoring_system__in=SCORING_SYSTEMS.values()) |
| 670 | .exclude(scoring_elements="") |
| 671 | ) |
| 672 | |
| 673 | epss_severity = advisory.severities.filter(scoring_system="epss").first() |
| 674 | epss_data = None |
| 675 | epss_advisory = None |
| 676 | if not epss_severity: |
| 677 | epss_advisory = ( |
| 678 | advisory.related_advisory_severities.filter( |
| 679 | datasource_id=EPSSImporterPipeline.pipeline_id |
| 680 | ) |
| 681 | .latest_per_avid() |
| 682 | .first() |
| 683 | ) |
| 684 | if epss_advisory: |
| 685 | epss_severity = epss_advisory.severities.filter(scoring_system="epss").first() |
| 686 | if epss_severity: |
| 687 | # If the advisory itself does not have EPSS severity, but has a related advisory with EPSS severity, we use the related advisory's EPSS severity and URL as the source of EPSS data. |
| 688 | epss_data = { |
| 689 | "percentile": epss_severity.scoring_elements, |
| 690 | "score": epss_severity.value, |
| 691 | "published_at": epss_severity.published_at, |
| 692 | "source": epss_advisory.url if epss_advisory else advisory.url, |
| 693 | "advisory": epss_advisory if epss_advisory else advisory, |
| 694 | } |
| 695 | |
| 696 | ssvc_entries = [] |
| 697 | seen = set() |
| 698 | |
| 699 | severity_vectors = [] |
| 700 | |
| 701 | for severity in valid_severities: |
| 702 | try: |
| 703 | vector_values_system = SCORING_SYSTEMS.get(severity.scoring_system) |
| 704 | if not vector_values_system: |
| 705 | logging.error(f"Unknown scoring system: {severity.scoring_system}") |
| 706 | continue |
| 707 | if vector_values_system.identifier in ["cvssv3.1_qr"]: |
| 708 | continue |
| 709 | vector_values = vector_values_system.get(severity.scoring_elements) |
| 710 | if vector_values: |
nothing calls this directly
no test coverage detected