@@ -126,15 +126,26 @@ def _request(self, method: str, url: str, **kwargs) -> Dict[str, Any]:
126
126
127
127
# Return JSON data for non-empty responses
128
128
if response .text :
129
- return response .json ()
129
+ try :
130
+ return response .json ()
131
+ except json .JSONDecodeError :
132
+ logger .warning (f"Received non-JSON response: { response .text } " )
133
+ return {"raw_content" : response .text }
130
134
return {}
131
135
except requests .exceptions .RequestException as e :
132
136
if hasattr (e , 'response' ) and e .response is not None :
133
137
try :
134
- error_body = e .response .json ()
135
- logger .error (f"GitHub API error details: { json .dumps (error_body )} " )
136
- except (ValueError , json .JSONDecodeError ):
137
- logger .error (f"GitHub API error: { e .response .text } " )
138
+ # Try to parse JSON, but handle case where response is not JSON
139
+ if e .response .text .strip ():
140
+ try :
141
+ error_body = e .response .json ()
142
+ logger .error (f"GitHub API error details: { json .dumps (error_body )} " )
143
+ except json .JSONDecodeError :
144
+ logger .error (f"GitHub API returned non-JSON error: { e .response .text } " )
145
+ else :
146
+ logger .error (f"GitHub API returned empty error response with status code: { e .response .status_code } " )
147
+ except (ValueError , AttributeError ):
148
+ logger .error (f"GitHub API error: Unable to parse response" )
138
149
logger .error (f"Request failed: { str (e )} " )
139
150
raise
140
151
@@ -174,25 +185,41 @@ def get_repository(
174
185
# Try with minimal parameters first
175
186
repo = self ._request ("POST" , url , json = {
176
187
"name" : repo_name ,
177
- "private" : False ,
188
+ "private" : True ,
178
189
"auto_init" : True
179
190
})
180
191
except requests .exceptions .HTTPError as create_error :
181
- # Log detailed error information for 422 errors
182
- if create_error .response .status_code == 422 :
183
- error_response = create_error .response .json ()
184
- logger .error (f"GitHub API error details: { json .dumps (error_response )} " )
185
- # Try again with even more minimal parameters if it's a schema validation issue
186
- if "message" in error_response and "Validation Failed" in error_response .get ("message" , "" ):
187
- logger .info ("Retrying repository creation with minimal parameters" )
188
- repo = self ._request ("POST" , url , json = {
189
- "name" : repo_name ,
190
- "private" : True
191
- })
192
+ # Safe handling of response parsing
193
+ error_message = str (create_error )
194
+ try :
195
+ if create_error .response .text .strip ():
196
+ try :
197
+ error_response = create_error .response .json ()
198
+ logger .error (f"GitHub API error details: { json .dumps (error_response )} " )
199
+ # Check for validation errors
200
+ if "message" in error_response and "Validation Failed" in error_response .get ("message" , "" ):
201
+ logger .info ("Retrying repository creation with minimal parameters" )
202
+ repo = self ._request ("POST" , url , json = {
203
+ "name" : repo_name ,
204
+ "private" : True
205
+ })
206
+ else :
207
+ raise create_error
208
+ except json .JSONDecodeError :
209
+ # Handle non-JSON responses
210
+ logger .error (f"GitHub API returned non-JSON error response: { create_error .response .text } " )
211
+ # Try with most minimal parameters as a fallback
212
+ logger .info ("Retrying repository creation with minimal parameters due to non-JSON error" )
213
+ repo = self ._request ("POST" , url , json = {
214
+ "name" : repo_name ,
215
+ "private" : True
216
+ })
192
217
else :
193
- raise
194
- else :
195
- raise
218
+ logger .error (f"Empty error response with status code: { create_error .response .status_code } " )
219
+ raise create_error
220
+ except (AttributeError , ValueError ) as parse_error :
221
+ logger .error (f"Error parsing response: { str (parse_error )} " )
222
+ raise create_error
196
223
197
224
# Wait for repository initialization
198
225
max_retries = 10
0 commit comments