def build_context(group: Group) -> Mapping[str, Any]: result, stats_24hr = get_serialized_and_stats(group, "24h") _, stats_14d = get_serialized_and_stats(group, "14d") first_release = group.get_first_release() if first_release is not None: last_release = group.get_last_release() else: last_release = None first_release_url = None if first_release: first_release_url = get_release_url(group, first_release) last_release_url = None if last_release: last_release_url = get_release_url(group, last_release) group_url = group.get_absolute_url( params={"referrer": "sentry-issues-glance"}) return { "type": result.get("metadata", {}).get("type", "Unknown Error"), "title": group.title, "title_url": group_url, "first_seen": result["firstSeen"], "last_seen": result["lastSeen"], "first_release": first_release, "first_release_url": first_release_url, "last_release": last_release, "last_release_url": last_release_url, "stats_24hr": stats_24hr, "stats_14d": stats_14d, }
def get_current_release_version_of_group(group: Group, follows_semver: bool = False ) -> Release | None: """ Function that returns the latest release version associated with a Group, and by latest we mean either most recent (date) or latest in semver versioning scheme Inputs: * group: Group of the issue * follows_semver: flag that determines whether the project of the group follows semantic versioning or not. Returns: current_release_version """ current_release_version = None if follows_semver: try: # This sets current_release_version to the latest semver version associated with a group order_by_semver_desc = [f"-{col}" for col in Release.SEMVER_COLS] current_release_version = ( Release.objects.filter_to_semver().filter( id__in=GroupRelease.objects.filter( project_id=group.project.id, group_id=group.id).values_list("release_id"), ).annotate_prerelease_column().order_by( *order_by_semver_desc).values_list("version", flat=True)[:1].get()) except Release.DoesNotExist: pass else: # This sets current_release_version to the most recent release associated with a group # In order to be able to do that, `use_cache` has to be set to False. Otherwise, # group.get_last_release might not return the actual latest release associated with a # group but rather a cached version (which might or might not be the actual latest. It is # the first latest observed by Sentry) current_release_version = group.get_last_release(use_cache=False) return current_release_version