1+ from __future__ import annotations
2+
13from django .http import Http404
4+ from django .http .response import HttpResponseBase
25from rest_framework .request import Request
3- from rest_framework .response import Response
46
57from sentry .api .base import EnvironmentMixin
68from sentry .data_export .base import ExportError
79from sentry .data_export .processors .issues_by_tag import IssuesByTagProcessor
810from sentry .models .environment import Environment
11+ from sentry .tagstore .types import GroupTagValue
912from sentry .web .frontend .base import ProjectView , region_silo_view
10- from sentry .web .frontend .mixins . csv import CsvMixin
13+ from sentry .web .frontend .csv import CsvResponder
1114
1215
13- @ region_silo_view
14- class GroupTagExportView ( ProjectView , CsvMixin , EnvironmentMixin ) :
15- required_scope = "event:read"
16+ class GroupTagCsvResponder ( CsvResponder [ GroupTagValue ]):
17+ def __init__ ( self , key : str ) -> None :
18+ self . key = key
1619
17- def get_header (self , key ) :
18- return tuple (IssuesByTagProcessor .get_header_fields (key ))
20+ def get_header (self ) -> tuple [ str , ...] :
21+ return tuple (IssuesByTagProcessor .get_header_fields (self . key ))
1922
20- def get_row (self , item , key ) :
21- fields = IssuesByTagProcessor .get_header_fields (key )
22- item_dict = IssuesByTagProcessor .serialize_row (item , key )
23- return (item_dict [field ] for field in fields )
23+ def get_row (self , item : GroupTagValue ) -> tuple [ str , ...] :
24+ fields = IssuesByTagProcessor .get_header_fields (self . key )
25+ item_dict = IssuesByTagProcessor .serialize_row (item , self . key )
26+ return tuple (item_dict [field ] for field in fields )
2427
25- def get (self , request : Request , organization , project , group_id , key ) -> Response :
2628
29+ @region_silo_view
30+ class GroupTagExportView (ProjectView , EnvironmentMixin ):
31+ required_scope = "event:read"
32+
33+ def get (self , request : Request , organization , project , group_id , key ) -> HttpResponseBase :
2734 # If the environment doesn't exist then the tag can't possibly exist
2835 try :
2936 environment_id = self ._get_environment_id_from_request (request , project .organization_id )
@@ -43,4 +50,4 @@ def get(self, request: Request, organization, project, group_id, key) -> Respons
4350
4451 filename = f"{ processor .group .qualified_short_id or processor .group .id } -{ key } "
4552
46- return self . to_csv_response (processor .get_raw_data (), filename , key = key )
53+ return GroupTagCsvResponder ( key ). respond (processor .get_raw_data (), filename )
0 commit comments