MCPcopy Create free account
hub / github.com/exercism/cli / submit

Method submit

cmd/submit.go:255–306  ·  view source on GitHub ↗

submit submits the documents to the Exercism API.

(metadata *workspace.ExerciseMetadata, docs []workspace.Document)

Source from the content-addressed store, hash-verified

253
254// submit submits the documents to the Exercism API.
255func (s *submitCmdContext) submit(metadata *workspace.ExerciseMetadata, docs []workspace.Document) error {
256 body := &bytes.Buffer{}
257 writer := multipart.NewWriter(body)
258
259 for _, doc := range docs {
260 file, err := os.Open(doc.Filepath())
261 if err != nil {
262 return err
263 }
264 defer file.Close()
265
266 part, err := writer.CreateFormFile("files[]", doc.Path())
267 if err != nil {
268 return err
269 }
270 _, err = io.Copy(part, file)
271 if err != nil {
272 return err
273 }
274 }
275 if err := writer.Close(); err != nil {
276 return err
277 }
278
279 client, err := api.NewClient(s.usrCfg.GetString("token"), s.usrCfg.GetString("apibaseurl"))
280 if err != nil {
281 return err
282 }
283 url := fmt.Sprintf("%s/solutions/%s", s.usrCfg.GetString("apibaseurl"), metadata.ID)
284 req, err := client.NewRequest("PATCH", url, body)
285 if err != nil {
286 return err
287 }
288 req.Header.Set("Content-Type", writer.FormDataContentType())
289
290 resp, err := client.Do(req)
291 if err != nil {
292 return err
293 }
294 defer resp.Body.Close()
295
296 if resp.StatusCode < 200 || resp.StatusCode > 299 {
297 return decodedAPIError(resp)
298 }
299
300 bb := &bytes.Buffer{}
301 _, err = bb.ReadFrom(resp.Body)
302 if err != nil {
303 return err
304 }
305 return nil
306}
307
308func (s *submitCmdContext) printResult(metadata *workspace.ExerciseMetadata) {
309 msg := `

Callers 1

runSubmitFunction · 0.80

Calls 6

NewRequestMethod · 0.95
DoMethod · 0.95
NewClientFunction · 0.92
decodedAPIErrorFunction · 0.85
FilepathMethod · 0.45
PathMethod · 0.45

Tested by

no test coverage detected