online-judge-tools / api-client

API client to develop tools for competitive programming
MIT License
62 stars 18 forks source link

fix HackerRank submission #130

Closed wapa5pow closed 3 years ago

wapa5pow commented 3 years ago

Problem

When this tool submit code to HackerRank, the tool throws the following error.

[ERROR] Object of type bytes is not JSON serializable
Traceback (most recent call last):
  File "/Users/koichi.ishida/.anyenv/envs/pyenv/versions/3.8.2/lib/python3.8/site-packages/onlinejudge_command/main.py", line 271, in main
    run_program(parsed, parser=parser)
  File "/Users/koichi.ishida/.anyenv/envs/pyenv/versions/3.8.2/lib/python3.8/site-packages/onlinejudge_command/main.py", line 241, in run_program
    submit(args)
  File "/Users/koichi.ishida/.anyenv/envs/pyenv/versions/3.8.2/lib/python3.8/site-packages/onlinejudge_command/subcommand/submit.py", line 136, in submit
    submission = problem.submit_code(code, language_id=LanguageId(args.language), session=sess)
  File "/Users/koichi.ishida/.anyenv/envs/pyenv/versions/3.8.2/lib/python3.8/site-packages/onlinejudge/service/hackerrank.py", line 164, in submit_code
    resp = utils.request('POST', url, session=session, json=payload, headers={'X-CSRF-Token': csrftoken})
  File "/Users/koichi.ishida/.anyenv/envs/pyenv/versions/3.8.2/lib/python3.8/site-packages/onlinejudge/_implementation/utils.py", line 175, in request
    resp = session.request(method, url, **kwargs)
  File "/Users/koichi.ishida/.anyenv/envs/pyenv/versions/3.8.2/lib/python3.8/site-packages/requests/sessions.py", line 516, in request
    prep = self.prepare_request(req)
  File "/Users/koichi.ishida/.anyenv/envs/pyenv/versions/3.8.2/lib/python3.8/site-packages/requests/sessions.py", line 449, in prepare_request
    p.prepare(
  File "/Users/koichi.ishida/.anyenv/envs/pyenv/versions/3.8.2/lib/python3.8/site-packages/requests/models.py", line 317, in prepare
    self.prepare_body(data, files, json)
  File "/Users/koichi.ishida/.anyenv/envs/pyenv/versions/3.8.2/lib/python3.8/site-packages/requests/models.py", line 467, in prepare_body
    body = complexjson.dumps(json)
  File "/Users/koichi.ishida/.anyenv/envs/pyenv/versions/3.8.2/lib/python3.8/json/__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
  File "/Users/koichi.ishida/.anyenv/envs/pyenv/versions/3.8.2/lib/python3.8/json/encoder.py", line 199, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "/Users/koichi.ishida/.anyenv/envs/pyenv/versions/3.8.2/lib/python3.8/json/encoder.py", line 257, in iterencode
    return _iterencode(o, 0)
  File "/Users/koichi.ishida/.anyenv/envs/pyenv/versions/3.8.2/lib/python3.8/json/encoder.py", line 179, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type bytes is not JSON serializable

What this PR have done

This code change variable code type from bytes to string. I successfully submit it to HackerRank.

(Python 3.8.2)