6
6
import os
7
7
import config
8
8
9
-
10
9
RPC_DEFINITION_FILE = os .path .join (config .PROTO_DIR , config .RPC_DEFINITION_FILE )
11
10
11
+
12
12
def get_rpcs_from_sets (descriptor , matches , single_responses , single_requests , repo_path , tree_ish , request_path ,
13
13
response_path ):
14
14
content = []
@@ -22,13 +22,15 @@ def get_rpcs_from_sets(descriptor, matches, single_responses, single_requests, r
22
22
23
23
request_type = request [1 ].type_name .split ('.' )[- 1 ]
24
24
line = putils .get_line_number_for_location (descriptor .source_code_info , message_path )
25
- request_link = utils .generate_link (repo_path , tree_ish , os .path .basename (RPC_DEFINITION_FILE ), short_directory , line )
25
+ request_link = utils .generate_link (repo_path , tree_ish , os .path .basename (RPC_DEFINITION_FILE ), short_directory ,
26
+ line )
26
27
content .append (gen .generate_rpc_message (request_type , request [1 ].name , True , request_link ))
27
28
28
29
response_type = response [1 ].type_name .split ('.' )[- 1 ]
29
30
message_path = [4 , response_path , 2 , response [0 ]]
30
31
line = putils .get_line_number_for_location (descriptor .source_code_info , message_path )
31
- response_link = utils .generate_link (repo_path , tree_ish , os .path .basename (RPC_DEFINITION_FILE ), short_directory , line )
32
+ response_link = utils .generate_link (repo_path , tree_ish , os .path .basename (RPC_DEFINITION_FILE ), short_directory ,
33
+ line )
32
34
content .append (gen .generate_rpc_message (response_type , response [1 ].name , False , response_link ))
33
35
34
36
for single_request in single_requests :
@@ -39,7 +41,8 @@ def get_rpcs_from_sets(descriptor, matches, single_responses, single_requests, r
39
41
40
42
request_type = single_request [1 ].type_name .split ('.' )[- 1 ]
41
43
line = putils .get_line_number_for_location (descriptor .source_code_info , message_path )
42
- request_link = utils .generate_link (repo_path , tree_ish , os .path .basename (RPC_DEFINITION_FILE ), short_directory , line )
44
+ request_link = utils .generate_link (repo_path , tree_ish , os .path .basename (RPC_DEFINITION_FILE ), short_directory ,
45
+ line )
43
46
content .append (gen .generate_rpc_message (request_type , single_request [1 ].name , False , request_link ))
44
47
45
48
for single_response in single_responses :
@@ -50,7 +53,8 @@ def get_rpcs_from_sets(descriptor, matches, single_responses, single_requests, r
50
53
51
54
request_type = single_response [1 ].type_name .split ('.' )[- 1 ]
52
55
line = putils .get_line_number_for_location (descriptor .source_code_info , message_path )
53
- request_link = utils .generate_link (repo_path , tree_ish , os .path .basename (RPC_DEFINITION_FILE ), short_directory , line )
56
+ request_link = utils .generate_link (repo_path , tree_ish , os .path .basename (RPC_DEFINITION_FILE ), short_directory ,
57
+ line )
54
58
content .append (gen .generate_rpc_message (request_type , single_response [1 ].name , True , request_link ))
55
59
56
60
return content
@@ -62,17 +66,17 @@ def rpc(repo_path, tree_ish):
62
66
descriptor_set = putils .load_descriptor_set ()
63
67
for descriptor in descriptor_set .file :
64
68
check_required_fields (descriptor )
65
- matches , single_responses , single_requests = get_rpc_sets_from_file_descriptor (descriptor )
66
- requests_path , _ = get_message_descriptor (descriptor , config .REQUESTS_MESSAGE_NAME )
67
- responses_path , _ = get_message_descriptor (descriptor , config .RESPONSES_MESSAGE_NAME )
69
+ matches , single_responses , single_requests = _get_rpc_sets_from_file_descriptor (descriptor )
70
+ requests_path , _ = _get_message_descriptor (descriptor , config .REQUESTS_MESSAGE_NAME )
71
+ responses_path , _ = _get_message_descriptor (descriptor , config .RESPONSES_MESSAGE_NAME )
68
72
content .extend (get_rpcs_from_sets (descriptor , matches , single_responses , single_requests , repo_path , tree_ish ,
69
73
requests_path , responses_path ))
70
74
return '' .join (content )
71
75
72
76
73
- def get_message_field_descriptors (file_descriptor , message_name ):
77
+ def _get_message_field_descriptors (file_descriptor , message_name ):
74
78
message_descriptors = []
75
- _ , message_descriptor = get_message_descriptor (file_descriptor , message_name )
79
+ _ , message_descriptor = _get_message_descriptor (file_descriptor , message_name )
76
80
if not message_descriptor :
77
81
raise Exception (f'No message with name "{ message_name } " found.' )
78
82
for field_id , field in enumerate (message_descriptor .field ):
@@ -82,29 +86,29 @@ def get_message_field_descriptors(file_descriptor, message_name):
82
86
return message_descriptors
83
87
84
88
85
- def get_message_descriptor (file_descriptor , message_name ):
89
+ def _get_message_descriptor (file_descriptor , message_name ):
86
90
for message_index , message in enumerate (file_descriptor .message_type ):
87
91
if message .name == message_name :
88
92
return message_index , message
89
93
return None
90
94
91
95
92
- def is_request_present (file_descriptor ):
93
- return get_message_descriptor (file_descriptor , config .REQUESTS_MESSAGE_NAME ) is not None
96
+ def _is_request_present (file_descriptor ):
97
+ return _get_message_descriptor (file_descriptor , config .REQUESTS_MESSAGE_NAME ) is not None
94
98
95
99
96
- def is_response_resent (file_descriptor ):
97
- return get_message_descriptor (file_descriptor , config .RESPONSES_MESSAGE_NAME ) is not None
100
+ def _is_response_resent (file_descriptor ):
101
+ return _get_message_descriptor (file_descriptor , config .RESPONSES_MESSAGE_NAME ) is not None
98
102
99
103
100
- def get_rpc_sets_from_file_descriptor (file_descriptor ):
101
- if not is_request_present (file_descriptor ):
104
+ def _get_rpc_sets_from_file_descriptor (file_descriptor ):
105
+ if not _is_request_present (file_descriptor ):
102
106
raise Exception ('Request message not present.' )
103
- if not is_response_resent (file_descriptor ):
107
+ if not _is_response_resent (file_descriptor ):
104
108
raise Exception ('Response message not present.' )
105
- request_messages = get_message_field_descriptors (file_descriptor , config .REQUESTS_MESSAGE_NAME )
106
- response_messages = get_message_field_descriptors (file_descriptor , config .RESPONSES_MESSAGE_NAME )
107
- matches , leftover_requests , leftover_responses = get_matches (request_messages , response_messages )
109
+ request_messages = _get_message_field_descriptors (file_descriptor , config .REQUESTS_MESSAGE_NAME )
110
+ response_messages = _get_message_field_descriptors (file_descriptor , config .RESPONSES_MESSAGE_NAME )
111
+ matches , leftover_requests , leftover_responses = _get_matches (request_messages , response_messages )
108
112
for left_request in leftover_requests :
109
113
if left_request [1 ].name .endswith (config .REQUESTS_MESSAGE_NAME ):
110
114
raise Exception (f'No matching response for { left_request .name } ' )
@@ -114,7 +118,7 @@ def get_rpc_sets_from_file_descriptor(file_descriptor):
114
118
return matches , leftover_requests , leftover_responses
115
119
116
120
117
- def get_matches (requests , responses ):
121
+ def _get_matches (requests , responses ):
118
122
matches = []
119
123
leftover_requests = []
120
124
leftover_responses = responses .copy ()
@@ -134,16 +138,18 @@ def get_matches(requests, responses):
134
138
135
139
136
140
def check_required_fields (file_descriptor ):
137
- _ , request_descriptor = get_message_descriptor (file_descriptor , config .REQUESTS_MESSAGE_NAME )
138
- request_fields = [field .name for field in request_descriptor .field ]
139
- for required_field in config .REQUIRED_REQUEST_FIELDS :
140
- if required_field in request_fields :
141
- continue
142
- raise Exception (f'Required field "{ required_field } " not present in request message.' )
141
+ _ , request_descriptor = _get_message_descriptor (file_descriptor , config .REQUESTS_MESSAGE_NAME )
142
+ request_fields = {field .name : field .number for field in request_descriptor .field }
143
+ _check_for_missing_fields (request_fields , config .REQUIRED_REQUEST_FIELDS )
143
144
144
- _ , response_descriptor = get_message_descriptor (file_descriptor , config .RESPONSES_MESSAGE_NAME )
145
- response_fields = [field .name for field in response_descriptor .field ]
146
- for required_field in config .REQUIRED_RESPONSE_FIELDS :
147
- if required_field in response_fields :
148
- continue
149
- raise Exception (f'Required field "{ required_field } " not present in response message.' )
145
+ _ , response_descriptor = _get_message_descriptor (file_descriptor , config .RESPONSES_MESSAGE_NAME )
146
+ response_fields = {field .name : field .number for field in response_descriptor .field }
147
+ _check_for_missing_fields (response_fields , config .REQUIRED_RESPONSE_FIELDS )
148
+
149
+
150
+ def _check_for_missing_fields (existing_fields , required_fields ):
151
+ for required_field_name , required_field_number in required_fields :
152
+ if required_field_name not in existing_fields :
153
+ raise Exception (f'Required field "{ required_field_name } " not present in response message.' )
154
+ if existing_fields [required_field_name ] != required_field_number :
155
+ raise Exception (f'Required field "{ required_field_name } " in response message has incorrect number. Expected { required_field_number } , got { existing_fields [required_field_name ]} .' )
0 commit comments