From 4f054cabc1a148d75cbc1102456d9df86a4c0c54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Karlo=20Do=C5=A1ilovi=C4=87?= Date: Fri, 20 Dec 2024 18:03:03 +0100 Subject: [PATCH 01/20] Change the title of release notes doc. --- docs/source/contributors_guide/release_notes.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/contributors_guide/release_notes.rst b/docs/source/contributors_guide/release_notes.rst index 0b6251f..ec66b1c 100644 --- a/docs/source/contributors_guide/release_notes.rst +++ b/docs/source/contributors_guide/release_notes.rst @@ -1,4 +1,4 @@ -How to create a release candidate -================================= +How to create a release +======================= TODO \ No newline at end of file From 11a4f784a80070a3b1e120c854c2f3be93084acf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Karlo=20Do=C5=A1ilovi=C4=87?= Date: Fri, 20 Dec 2024 22:57:15 +0100 Subject: [PATCH 02/20] Initial commit of working docs versioning. --- .github/workflows/docs.yml | 4 +++- docs/requirements.txt | 1 + docs/source/_templates/versioning.html | 8 ++++++++ docs/source/conf.py | 27 ++++++++++++++++++++++---- docs/source/index.rst | 2 +- 5 files changed, 36 insertions(+), 6 deletions(-) create mode 100644 docs/source/_templates/versioning.html diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 1d5909d..efd3954 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -18,6 +18,8 @@ jobs: - name: Build HTML uses: ammaraskar/sphinx-action@7.0.0 + with: + build-command: "sphinx-multiversion source build/html" - name: Upload artifacts uses: actions/upload-artifact@v4 @@ -30,4 +32,4 @@ jobs: if: github.ref == 'refs/heads/master' with: github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: docs/build/html \ No newline at end of file + publish_dir: docs/build/html/master \ No newline at end of file diff --git a/docs/requirements.txt b/docs/requirements.txt index 8e76ca0..ae1043d 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,2 +1,3 @@ sphinxawesome-theme==5.3.2 sphinx-autodoc-typehints==2.3.0 +sphinx-multiversion==0.2.4 \ No newline at end of file diff --git a/docs/source/_templates/versioning.html b/docs/source/_templates/versioning.html new file mode 100644 index 0000000..ef74ed4 --- /dev/null +++ b/docs/source/_templates/versioning.html @@ -0,0 +1,8 @@ +{% if versions %} +

{{ _('Versions') }}

+ +{% endif %} \ No newline at end of file diff --git a/docs/source/conf.py b/docs/source/conf.py index 77420a5..9312dcd 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -13,7 +13,7 @@ project = "Judge0 Python SDK" copyright = "2024, Judge0" author = "Judge0" -release = "0.1" +release = "" # -- General configuration --------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration @@ -23,19 +23,24 @@ "sphinx.ext.napoleon", "sphinx.ext.autosummary", "sphinx_autodoc_typehints", + "sphinx_multiversion", ] templates_path = ["_templates"] exclude_patterns = [] - -# add_module_names = False - # -- Options for HTML output ------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output html_theme = "sphinxawesome_theme" html_show_sphinx = False +html_sidebars = { + "**": [ + "sidebar_main_nav_links.html", + "sidebar_toc.html", + "versioning.html", + ], +} sys.path.insert(0, os.path.abspath("../../src/")) # Adjust as needed @@ -50,3 +55,17 @@ autodoc_mock_imports = ["requests", "pydantic"] napoleon_google_docstring = False + +# Whitelist pattern for tags (set to None to ignore all tags) +smv_tag_whitelist = r"^.*$" +# Whitelist pattern for branches (set to None to ignore all branches) +smv_branch_whitelist = r"^master$" +# Whitelist pattern for remotes (set to None to use local branches only) +smv_remote_whitelist = None +# Pattern for released versions +smv_released_pattern = "" # r"^tags/.*$" +# Format for versioned output directories inside the build directory +smv_outputdir_format = "{ref.name}" +# Determines whether remote or local git branches/tags are preferred if their +# output dirs conflict +smv_prefer_remote_refs = False diff --git a/docs/source/index.rst b/docs/source/index.rst index 6c202aa..b8ebcd9 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -15,7 +15,7 @@ You can run minimal Hello World example in three easy steps: 2. Create a minimal script: -.. code-block:: Python +.. code-block:: python import judge0 From 6ae246f7744160e45e9cbd2dd7301d9e64894d18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Karlo=20Do=C5=A1ilovi=C4=87?= Date: Fri, 20 Dec 2024 23:30:20 +0100 Subject: [PATCH 03/20] Update docs.yml workflow. --- .github/workflows/docs.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index efd3954..81ac601 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -19,7 +19,7 @@ jobs: - name: Build HTML uses: ammaraskar/sphinx-action@7.0.0 with: - build-command: "sphinx-multiversion source build/html" + build-command: "sphinx-multiversion source build/html -e" - name: Upload artifacts uses: actions/upload-artifact@v4 @@ -32,4 +32,4 @@ jobs: if: github.ref == 'refs/heads/master' with: github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: docs/build/html/master \ No newline at end of file + publish_dir: docs/build/html/master From 013a96ca064adad1e827fd46804f2f8b07599d54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Karlo=20Do=C5=A1ilovi=C4=87?= Date: Fri, 20 Dec 2024 23:35:40 +0100 Subject: [PATCH 04/20] Update docs.yml workflow with redirection to sphinx-log.txt --- .github/workflows/docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 81ac601..bdea8f0 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -19,7 +19,7 @@ jobs: - name: Build HTML uses: ammaraskar/sphinx-action@7.0.0 with: - build-command: "sphinx-multiversion source build/html -e" + build-command: "sphinx-multiversion source build/html --keep-going --no-color > sphinx-log.txt" - name: Upload artifacts uses: actions/upload-artifact@v4 From 60fbef35ebafc3f8e948dc183da9670db184c361 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Karlo=20Do=C5=A1ilovi=C4=87?= Date: Fri, 20 Dec 2024 23:48:48 +0100 Subject: [PATCH 05/20] Update docs.yml with explicit creation of sphinx-log --- .github/workflows/docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index bdea8f0..f30f497 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -19,7 +19,7 @@ jobs: - name: Build HTML uses: ammaraskar/sphinx-action@7.0.0 with: - build-command: "sphinx-multiversion source build/html --keep-going --no-color > sphinx-log.txt" + build-command: "touch /tmp/sphinx-log && sphinx-multiversion source build/html" - name: Upload artifacts uses: actions/upload-artifact@v4 From aef4e8ed08e022a7b915f283ec59c4c9e2135fae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Karlo=20Do=C5=A1ilovi=C4=87?= Date: Fri, 20 Dec 2024 23:56:55 +0100 Subject: [PATCH 06/20] Update docs.yml --- .github/workflows/docs.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index f30f497..9c3b412 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -16,10 +16,15 @@ jobs: with: persist-credentials: false + # Temporary solution since sphinx-multiversion does + # not have -w option. + - name: Pre-create log file + run: touch /tmp/sphinx-log + - name: Build HTML uses: ammaraskar/sphinx-action@7.0.0 with: - build-command: "touch /tmp/sphinx-log && sphinx-multiversion source build/html" + build-command: "sphinx-multiversion source build/html" - name: Upload artifacts uses: actions/upload-artifact@v4 From de2ee1ef477b4e8a8be8bf8320adbd5d9df1a1f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Karlo=20Do=C5=A1ilovi=C4=87?= Date: Sat, 21 Dec 2024 00:07:38 +0100 Subject: [PATCH 07/20] Update to remove ammaraskar/sphinx-action@7.0.0 --- .github/workflows/docs.yml | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 9c3b412..5a05350 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -16,15 +16,18 @@ jobs: with: persist-credentials: false - # Temporary solution since sphinx-multiversion does - # not have -w option. - - name: Pre-create log file - run: touch /tmp/sphinx-log - - - name: Build HTML - uses: ammaraskar/sphinx-action@7.0.0 + - name: Set up Python + uses: actions/setup-python@v4 with: - build-command: "sphinx-multiversion source build/html" + python-version: "3.9" + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install sphinx==7.4.7 sphinxawesome-theme==5.3.2 sphinx-autodoc-typehints==2.3.0 sphinx-multiversion==0.2.4 + + - name: Build documentation + run: sphinx-multiversion docs/source docs/build/html --keep-going --no-color" - name: Upload artifacts uses: actions/upload-artifact@v4 From 4cecba931bf0d34f3d73f5b6f7777375df642a23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Karlo=20Do=C5=A1ilovi=C4=87?= Date: Sat, 21 Dec 2024 00:09:00 +0100 Subject: [PATCH 08/20] Fix error in docs.yml --- .github/workflows/docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 5a05350..3a864c7 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -27,7 +27,7 @@ jobs: pip install sphinx==7.4.7 sphinxawesome-theme==5.3.2 sphinx-autodoc-typehints==2.3.0 sphinx-multiversion==0.2.4 - name: Build documentation - run: sphinx-multiversion docs/source docs/build/html --keep-going --no-color" + run: sphinx-multiversion docs/source docs/build/html --keep-going --no-color - name: Upload artifacts uses: actions/upload-artifact@v4 From bc12fad8fae9c6e4f7dd565c0adc9fa5f642c4fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Karlo=20Do=C5=A1ilovi=C4=87?= Date: Sat, 21 Dec 2024 00:11:36 +0100 Subject: [PATCH 09/20] Use docs/requirements in docs.yml workflow. --- .github/workflows/docs.yml | 2 +- docs/requirements.txt | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 3a864c7..af15327 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -24,7 +24,7 @@ jobs: - name: Install dependencies run: | python -m pip install --upgrade pip - pip install sphinx==7.4.7 sphinxawesome-theme==5.3.2 sphinx-autodoc-typehints==2.3.0 sphinx-multiversion==0.2.4 + pip install -r docs/requirements.txt - name: Build documentation run: sphinx-multiversion docs/source docs/build/html --keep-going --no-color diff --git a/docs/requirements.txt b/docs/requirements.txt index ae1043d..cd3bc0f 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,3 +1,4 @@ +sphinx==7.4.7 sphinxawesome-theme==5.3.2 sphinx-autodoc-typehints==2.3.0 sphinx-multiversion==0.2.4 \ No newline at end of file From 88d8dc26895de7505f5a7d76a0d30f47da06279a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Karlo=20Do=C5=A1ilovi=C4=87?= Date: Sat, 21 Dec 2024 00:14:28 +0100 Subject: [PATCH 10/20] Enable release tags in conf.py for docs. --- docs/source/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 9312dcd..3d715eb 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -63,7 +63,7 @@ # Whitelist pattern for remotes (set to None to use local branches only) smv_remote_whitelist = None # Pattern for released versions -smv_released_pattern = "" # r"^tags/.*$" +smv_released_pattern = r"^tags/.*$" # Format for versioned output directories inside the build directory smv_outputdir_format = "{ref.name}" # Determines whether remote or local git branches/tags are preferred if their From c68197e56f24f56afc63d1e49fbd4447a994306b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Karlo=20Do=C5=A1ilovi=C4=87?= Date: Sat, 21 Dec 2024 00:21:45 +0100 Subject: [PATCH 11/20] Fetch all tags of repo for building docs. --- .github/workflows/docs.yml | 7 ++++++- docs/source/conf.py | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index af15327..7fe6d47 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -15,7 +15,12 @@ jobs: - uses: actions/checkout@v4 with: persist-credentials: false - + fetch-depth: 0 # Fetch the full history + ref: ${{ github.ref }} # Check out the current branch or tag + + - name: Fetch tags only + run: git fetch --tags --no-recurse-submodules + - name: Set up Python uses: actions/setup-python@v4 with: diff --git a/docs/source/conf.py b/docs/source/conf.py index 3d715eb..9312dcd 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -63,7 +63,7 @@ # Whitelist pattern for remotes (set to None to use local branches only) smv_remote_whitelist = None # Pattern for released versions -smv_released_pattern = r"^tags/.*$" +smv_released_pattern = "" # r"^tags/.*$" # Format for versioned output directories inside the build directory smv_outputdir_format = "{ref.name}" # Determines whether remote or local git branches/tags are preferred if their From ca0d721962c634cf906b47b56c7c6312d022c118 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Karlo=20Do=C5=A1ilovi=C4=87?= Date: Sat, 21 Dec 2024 00:24:59 +0100 Subject: [PATCH 12/20] Update publish_dir in docs workflow. --- .github/workflows/docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 7fe6d47..42c1b0c 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -45,4 +45,4 @@ jobs: if: github.ref == 'refs/heads/master' with: github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: docs/build/html/master + publish_dir: docs/build/html From 00b1ce6f66d99e1b4cecc5e9f1263ef60f941825 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Karlo=20Do=C5=A1ilovi=C4=87?= Date: Sat, 21 Dec 2024 00:37:49 +0100 Subject: [PATCH 13/20] Add redirect file. --- .github/workflows/docs.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 42c1b0c..d5c9a0d 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -34,6 +34,18 @@ jobs: - name: Build documentation run: sphinx-multiversion docs/source docs/build/html --keep-going --no-color + - name: Generate index.html for judge0.github.io/judge0-python. + run: | + echo ' + + + + + +

Redirecting to master/index.html

+ + ' > docs/build/html/index.html + - name: Upload artifacts uses: actions/upload-artifact@v4 with: From eb4fbffbd4ef9a906d14fefd7c8ac3e79afc6a59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Karlo=20Do=C5=A1ilovi=C4=87?= Date: Sat, 21 Dec 2024 00:41:19 +0100 Subject: [PATCH 14/20] Remove body from generated index.html --- .github/workflows/docs.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index d5c9a0d..4b2aa46 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -41,9 +41,6 @@ jobs: - -

Redirecting to master/index.html

- ' > docs/build/html/index.html - name: Upload artifacts From 0f63e3ed94c012b7e5c60d88a21a06ca6e97793c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Karlo=20Do=C5=A1ilovi=C4=87?= Date: Tue, 24 Dec 2024 09:17:12 +0100 Subject: [PATCH 15/20] Update Client docs. Simplify docs structure. --- docs/source/api/clients.rst | 46 ++++++++- docs/source/api/index.rst | 7 -- docs/source/api/types.rst | 2 +- docs/source/conf.py | 4 +- docs/source/contributors_guide/index.rst | 5 - docs/source/index.rst | 13 ++- src/judge0/clients.py | 115 +++++++++++++++++++++-- 7 files changed, 160 insertions(+), 32 deletions(-) delete mode 100644 docs/source/api/index.rst delete mode 100644 docs/source/contributors_guide/index.rst diff --git a/docs/source/api/clients.rst b/docs/source/api/clients.rst index 52e7e4e..b4d15c9 100644 --- a/docs/source/api/clients.rst +++ b/docs/source/api/clients.rst @@ -1,6 +1,46 @@ Clients Module ============== -.. automodule:: judge0.clients - :members: - :member-order: groupwise + +.. autoclass:: judge0.clients.Client + :exclude-members: API_KEY_ENV + +.. autoclass:: judge0.clients.ATD + :show-inheritance: + +.. autoclass:: judge0.clients.ATDJudge0CE + :show-inheritance: + :exclude-members: DEFAULT_ENDPOINT, DEFAULT_HOST, HOME_URL, DEFAULT_ABOUT_ENDPOINT, + DEFAULT_CONFIG_INFO_ENDPOINT, DEFAULT_LANGUAGE_ENDPOINT, DEFAULT_LANGUAGES_ENDPOINT, + DEFAULT_STATUSES_ENDPOINT, DEFAULT_CREATE_SUBMISSION_ENDPOINT, DEFAULT_GET_SUBMISSION_ENDPOINT, + DEFAULT_CREATE_SUBMISSIONS_ENDPOINT, DEFAULT_GET_SUBMISSIONS_ENDPOINT, get_about, + get_config_info, get_language, get_languages, get_statuses, create_submission, get_submission, + create_submissions, get_submissions + +.. autoclass:: judge0.clients.ATDJudge0ExtraCE + :show-inheritance: + :exclude-members: DEFAULT_ENDPOINT, DEFAULT_HOST, HOME_URL, DEFAULT_ABOUT_ENDPOINT, + DEFAULT_CONFIG_INFO_ENDPOINT, DEFAULT_LANGUAGE_ENDPOINT, DEFAULT_LANGUAGES_ENDPOINT, + DEFAULT_STATUSES_ENDPOINT, DEFAULT_CREATE_SUBMISSION_ENDPOINT, DEFAULT_GET_SUBMISSION_ENDPOINT, + DEFAULT_CREATE_SUBMISSIONS_ENDPOINT, DEFAULT_GET_SUBMISSIONS_ENDPOINT, get_about, + get_config_info, get_language, get_languages, get_statuses, create_submission, get_submission, + create_submissions, get_submissions + + +.. autoclass:: judge0.clients.Rapid + :show-inheritance: + +.. autoclass:: judge0.clients.RapidJudge0CE + :show-inheritance: + +.. autoclass:: judge0.clients.RapidJudge0ExtraCE + :show-inheritance: + +.. autoclass:: judge0.clients.Sulu + :show-inheritance: + +.. autoclass:: judge0.clients.SuluJudge0CE + :show-inheritance: + +.. autoclass:: judge0.clients.SuluJudge0ExtraCE + :show-inheritance: \ No newline at end of file diff --git a/docs/source/api/index.rst b/docs/source/api/index.rst deleted file mode 100644 index eb4ed67..0000000 --- a/docs/source/api/index.rst +++ /dev/null @@ -1,7 +0,0 @@ -.. toctree:: - :maxdepth: 2 - - api - submission - clients - types \ No newline at end of file diff --git a/docs/source/api/types.rst b/docs/source/api/types.rst index 2b415b3..219d7ed 100644 --- a/docs/source/api/types.rst +++ b/docs/source/api/types.rst @@ -3,4 +3,4 @@ Types Module .. automodule:: judge0.base_types :members: - :undoc-members: + diff --git a/docs/source/conf.py b/docs/source/conf.py index 9312dcd..a9ae07c 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -21,7 +21,7 @@ extensions = [ "sphinx.ext.autodoc", "sphinx.ext.napoleon", - "sphinx.ext.autosummary", + # "sphinx.ext.autosummary", "sphinx_autodoc_typehints", "sphinx_multiversion", ] @@ -47,7 +47,7 @@ autodoc_default_options = { "members": True, - "undoc-members": True, + "undoc-members": False, "private-members": False, "special-members": False, "inherited-members": False, diff --git a/docs/source/contributors_guide/index.rst b/docs/source/contributors_guide/index.rst deleted file mode 100644 index 312258b..0000000 --- a/docs/source/contributors_guide/index.rst +++ /dev/null @@ -1,5 +0,0 @@ -.. toctree:: - :maxdepth: 2 - - contributing - release_notes diff --git a/docs/source/index.rst b/docs/source/index.rst index b8ebcd9..3510578 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -25,15 +25,14 @@ You can run minimal Hello World example in three easy steps: 3. Run the script. Want to learn more ------------------- - +================== To learn what is happening behind the scenes and how to best use Judge0 Python SDK to facilitate the development of your own product see In Depth guide and Examples. Getting Involved ----------------- +================ TODO @@ -43,7 +42,10 @@ TODO :titlesonly: :hidden: - api/index + api/api + api/submission + api/clients + api/types .. toctree:: :caption: Getting Involved @@ -51,4 +53,5 @@ TODO :titlesonly: :hidden: - contributors_guide/index \ No newline at end of file + contributors_guide/contributing + contributors_guide/release_notes \ No newline at end of file diff --git a/src/judge0/clients.py b/src/judge0/clients.py index ff8e989..311d26b 100644 --- a/src/judge0/clients.py +++ b/src/judge0/clients.py @@ -10,6 +10,24 @@ class Client: + """Base class for all clients. + + Parameters + ---------- + endpoint : str + Client's default endpoint. + auth_headers : dict + Request authentication headers. + + Attributes + ---------- + API_KEY_ENV : str + Environment variable where judge0-python should look for API key for + the client. Set to default values for ATD, RapidAPI, and Sulu clients. + """ + + # Environment variable where judge0-python should look for API key for + # the client. Set to default values for ATD, RapidAPI, and Sulu clients. API_KEY_ENV: ClassVar[str] = None def __init__( @@ -24,7 +42,6 @@ def __init__( self.retry_strategy = retry_strategy self.session = requests.Session() - # TODO: Should be handled differently. try: self.languages = self.get_languages() self.config = self.get_config_info() @@ -39,6 +56,13 @@ def __del__(self): @handle_too_many_requests_error_for_preview_client def get_about(self) -> dict: + """Get general information about judge0. + + Returns + ------- + dict + General information about judge0. + """ response = self.session.get( f"{self.endpoint}/about", headers=self.auth_headers, @@ -48,6 +72,13 @@ def get_about(self) -> dict: @handle_too_many_requests_error_for_preview_client def get_config_info(self) -> Config: + """Get information about client's configuration. + + Returns + ------- + Config + Client's configuration. + """ response = self.session.get( f"{self.endpoint}/config_info", headers=self.auth_headers, @@ -57,6 +88,18 @@ def get_config_info(self) -> Config: @handle_too_many_requests_error_for_preview_client def get_language(self, language_id: int) -> Language: + """Get language corresponding to the id. + + Parameters + ---------- + language_id : int + Language id. + + Returns + ------- + Language + Language corresponding to the passed id. + """ request_url = f"{self.endpoint}/languages/{language_id}" response = self.session.get(request_url, headers=self.auth_headers) response.raise_for_status() @@ -64,6 +107,13 @@ def get_language(self, language_id: int) -> Language: @handle_too_many_requests_error_for_preview_client def get_languages(self) -> list[Language]: + """Get a list of supported languages. + + Returns + ------- + list of language + A list of supported languages. + """ request_url = f"{self.endpoint}/languages" response = self.session.get(request_url, headers=self.auth_headers) response.raise_for_status() @@ -71,6 +121,13 @@ def get_languages(self) -> list[Language]: @handle_too_many_requests_error_for_preview_client def get_statuses(self) -> list[dict]: + """Get a list of possible submission statuses. + + Returns + ------- + list of dict + A list of possible submission statues. + """ response = self.session.get( f"{self.endpoint}/statuses", headers=self.auth_headers, @@ -80,20 +137,43 @@ def get_statuses(self) -> list[dict]: @property def version(self): + """Property corresponding to the current client's version.""" if not hasattr(self, "_version"): _version = self.get_about()["version"] setattr(self, "_version", _version) return self._version def get_language_id(self, language: Union[LanguageAlias, int]) -> int: - """Get language id corresponding to the language alias for the client.""" + """Get language id corresponding to the language alias for the client. + + Parameters + ---------- + language : LanguageAlias or int + Language alias or language id. + + Returns + ------- + Language id corresponding to the language alias. + """ if isinstance(language, LanguageAlias): supported_language_ids = LANGUAGE_TO_LANGUAGE_ID[self.version] language = supported_language_ids.get(language, -1) return language def is_language_supported(self, language: Union[LanguageAlias, int]) -> bool: - """Check if language is supported by the client.""" + """Check if language is supported by the client. + + Parameters + ---------- + language : LanguageAlias or int + Language alias or language id. + + Returns + ------- + bool + Return True if language is supported by the client, otherwise returns + False. + """ language_id = self.get_language_id(language) return any(language_id == lang.id for lang in self.languages) @@ -208,9 +288,6 @@ def create_submissions(self, submissions: Submissions) -> Submissions: f"{submission.language}!" ) - # TODO: Maybe raise an exception if the number of submissions is bigger - # than the batch size a client supports? - submissions_body = [submission.as_body(self) for submission in submissions] response = self.session.post( @@ -516,7 +593,15 @@ def __init__(self, api_key, **kwargs): class Sulu(Client): - """Base class for all Sulu clients.""" + """Base class for all Sulu clients. + + Parameters + ---------- + endpoint : str + Default request endpoint. + api_key : str, optional + Sulu API key. + """ API_KEY_ENV: ClassVar[str] = "JUDGE0_SULU_API_KEY" @@ -530,7 +615,13 @@ def __init__(self, endpoint, api_key=None, **kwargs): class SuluJudge0CE(Sulu): - """Sulu client for CE flavor.""" + """Sulu client for CE flavor. + + Parameters + ---------- + api_key : str, optional + Sulu API key. + """ DEFAULT_ENDPOINT: ClassVar[str] = "https://judge0-ce.p.sulu.sh" HOME_URL: ClassVar[str] = "https://sparkhub.sulu.sh/apis/judge0/judge0-ce/readme" @@ -544,7 +635,13 @@ def __init__(self, api_key=None, **kwargs): class SuluJudge0ExtraCE(Sulu): - """Sulu client for Extra CE flavor.""" + """Sulu client for Extra CE flavor. + + Parameters + ---------- + api_key : str + Sulu API key. + """ DEFAULT_ENDPOINT: ClassVar[str] = "https://judge0-extra-ce.p.sulu.sh" HOME_URL: ClassVar[str] = ( From 73fc1f52f8d91d7d8ad97366390477e21f09e3de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Karlo=20Do=C5=A1ilovi=C4=87?= Date: Tue, 24 Dec 2024 09:26:59 +0100 Subject: [PATCH 16/20] Update submission and api docs. --- docs/source/api/api.rst | 2 +- docs/source/api/submission.rst | 2 ++ src/judge0/api.py | 5 +++++ src/judge0/submission.py | 4 ++-- 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/docs/source/api/api.rst b/docs/source/api/api.rst index 08b5d0e..e5b41b5 100644 --- a/docs/source/api/api.rst +++ b/docs/source/api/api.rst @@ -3,4 +3,4 @@ API Module .. automodule:: judge0.api :members: - :undoc-members: + :exclude-members: sync_run, async_run diff --git a/docs/source/api/submission.rst b/docs/source/api/submission.rst index e42a6aa..4f9977a 100644 --- a/docs/source/api/submission.rst +++ b/docs/source/api/submission.rst @@ -3,4 +3,6 @@ Submission Module .. automodule:: judge0.submission :members: + :exclude-members: process_encoded_fields, process_language, process_post_execution_filesystem, + process_status :member-order: groupwise diff --git a/src/judge0/api.py b/src/judge0/api.py index e254dd9..92b91b1 100644 --- a/src/judge0/api.py +++ b/src/judge0/api.py @@ -188,6 +188,11 @@ def wait( retry_strategy : RetryStrategy, optional A retry strategy. + Returns + ------- + Submission or Submissions + A single submission or a list of submissions. + Raises ------ ClientResolutionError diff --git a/src/judge0/submission.py b/src/judge0/submission.py index b9d474c..10863c8 100644 --- a/src/judge0/submission.py +++ b/src/judge0/submission.py @@ -208,7 +208,7 @@ def process_language( return value def set_attributes(self, attributes: dict[str, Any]) -> None: - """Set Submissions attributes while taking into account different + """Set submissions attributes while taking into account different attribute's types. Parameters @@ -236,7 +236,7 @@ def set_attributes(self, attributes: dict[str, Any]) -> None: def as_body(self, client: "Client") -> dict: """Prepare Submission as a dictionary while taking into account - the `client`'s restrictions. + the client's restrictions. """ body = { "source_code": encode(self.source_code), From f0b5d2b49dcde8371a1271960f77a2ab22c6eded Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Karlo=20Do=C5=A1ilovi=C4=87?= Date: Tue, 24 Dec 2024 09:37:28 +0100 Subject: [PATCH 17/20] Update test workflow to be included for PR's as well. --- .github/workflows/test.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 38c14e8..3c33777 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -4,6 +4,9 @@ on: push: branches: ["master"] paths: ["src/**", "tests/**"] + pull_request: + branches: ["master"] + paths: ["src/**", "tests/**"] permissions: contents: read From 78277eaf9dc90ae41af3ade1b42de8efb104289e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herman=20Zvonimir=20Do=C5=A1ilovi=C4=87?= Date: Tue, 24 Dec 2024 10:08:51 +0100 Subject: [PATCH 18/20] Add all LanguageAliases. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add all language aliases * Add all language alliases to dunder init. --------- Co-authored-by: Filip Karlo Došilović --- pyproject.toml | 12 ++- src/judge0/__init__.py | 69 +++++++++++++++-- src/judge0/base_types.py | 76 +++++++++++++++++-- src/judge0/data.py | 156 ++++++++++++++++++++++++++++++++++++--- 4 files changed, 288 insertions(+), 25 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 3568054..257ab80 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -49,5 +49,15 @@ docs = ["sphinx==7.4.7"] [tool.flake8] docstring-convention = "numpy" -extend-ignore = ["D205", "D400", "D105", "D100", "D101", "D102", "D103", "F821"] +extend-ignore = [ + 'D100', + 'D101', + 'D102', + 'D103', + 'D104', + 'D105', + 'D205', + 'D400', + 'F821', +] max-line-length = 88 diff --git a/src/judge0/__init__.py b/src/judge0/__init__.py index 5ccf40b..df0f78a 100644 --- a/src/judge0/__init__.py +++ b/src/judge0/__init__.py @@ -113,11 +113,70 @@ def _get_implicit_client(flavor: Flavor) -> Client: CE = Flavor.CE EXTRA_CE = Flavor.EXTRA_CE -# TODO: Let's use getattr and setattr for this language ALIASES and raise an -# exception if a value already exists. -PYTHON = LanguageAlias.PYTHON +ASSEMBLY = LanguageAlias.ASSEMBLY +BASH = LanguageAlias.BASH +BASIC = LanguageAlias.BASIC +BOSQUE = LanguageAlias.BOSQUE +C = LanguageAlias.C +C3 = LanguageAlias.C3 +CLOJURE = LanguageAlias.CLOJURE +COBOL = LanguageAlias.COBOL +COMMON_LISP = LanguageAlias.COMMON_LISP CPP = LanguageAlias.CPP -JAVA = LanguageAlias.JAVA -CPP_GCC = LanguageAlias.CPP_GCC CPP_CLANG = LanguageAlias.CPP_CLANG +CPP_GCC = LanguageAlias.CPP_GCC +CPP_TEST = LanguageAlias.CPP_TEST +CPP_TEST_CLANG = LanguageAlias.CPP_TEST_CLANG +CPP_TEST_GCC = LanguageAlias.CPP_TEST_GCC +CSHARP = LanguageAlias.CSHARP +CSHARP_DOTNET = LanguageAlias.CSHARP_DOTNET +CSHARP_MONO = LanguageAlias.CSHARP_MONO +CSHARP_TEST = LanguageAlias.CSHARP_TEST +C_CLANG = LanguageAlias.C_CLANG +C_GCC = LanguageAlias.C_GCC +D = LanguageAlias.D +DART = LanguageAlias.DART +ELIXIR = LanguageAlias.ELIXIR +ERLANG = LanguageAlias.ERLANG +EXECUTABLE = LanguageAlias.EXECUTABLE +FORTRAN = LanguageAlias.FORTRAN +FSHARP = LanguageAlias.FSHARP +GO = LanguageAlias.GO +GROOVY = LanguageAlias.GROOVY +HASKELL = LanguageAlias.HASKELL +JAVA = LanguageAlias.JAVA +JAVAFX = LanguageAlias.JAVAFX +JAVASCRIPT = LanguageAlias.JAVASCRIPT +JAVA_JDK = LanguageAlias.JAVA_JDK +JAVA_OPENJDK = LanguageAlias.JAVA_OPENJDK +JAVA_TEST = LanguageAlias.JAVA_TEST +KOTLIN = LanguageAlias.KOTLIN +LUA = LanguageAlias.LUA +MPI_C = LanguageAlias.MPI_C +MPI_CPP = LanguageAlias.MPI_CPP +MPI_PYTHON = LanguageAlias.MPI_PYTHON +MULTI_FILE = LanguageAlias.MULTI_FILE +NIM = LanguageAlias.NIM +OBJECTIVE_C = LanguageAlias.OBJECTIVE_C +OCAML = LanguageAlias.OCAML +OCTAVE = LanguageAlias.OCTAVE +PASCAL = LanguageAlias.PASCAL +PERL = LanguageAlias.PERL +PHP = LanguageAlias.PHP +PLAIN_TEXT = LanguageAlias.PLAIN_TEXT +PROLOG = LanguageAlias.PROLOG +PYTHON = LanguageAlias.PYTHON +PYTHON2 = LanguageAlias.PYTHON2 +PYTHON2_PYPY = LanguageAlias.PYTHON2_PYPY +PYTHON3 = LanguageAlias.PYTHON3 +PYTHON3_PYPY = LanguageAlias.PYTHON3_PYPY PYTHON_FOR_ML = LanguageAlias.PYTHON_FOR_ML +PYTHON_PYPY = LanguageAlias.PYTHON_PYPY +R = LanguageAlias.R +RUBY = LanguageAlias.RUBY +RUST = LanguageAlias.RUST +SCALA = LanguageAlias.SCALA +SQLITE = LanguageAlias.SQLITE +SWIFT = LanguageAlias.SWIFT +TYPESCRIPT = LanguageAlias.TYPESCRIPT +VISUAL_BASIC = LanguageAlias.VISUAL_BASIC diff --git a/src/judge0/base_types.py b/src/judge0/base_types.py index 05a7a64..8b892ba 100644 --- a/src/judge0/base_types.py +++ b/src/judge0/base_types.py @@ -1,7 +1,7 @@ import copy from dataclasses import dataclass -from enum import IntEnum +from enum import IntEnum, auto from typing import Optional, Protocol, runtime_checkable, Sequence, Union from pydantic import BaseModel @@ -59,13 +59,73 @@ class Language(BaseModel): class LanguageAlias(IntEnum): """Language enumeration.""" - - PYTHON = 0 - CPP = 1 - JAVA = 2 - CPP_GCC = 3 - CPP_CLANG = 4 - PYTHON_FOR_ML = 5 + ASSEMBLY = auto() + BASH = auto() + BASIC = auto() + BOSQUE = auto() + C = auto() + C3 = auto() + CLOJURE = auto() + COBOL = auto() + COMMON_LISP = auto() + CPP = auto() + CPP_CLANG = auto() + CPP_GCC = auto() + CPP_TEST = auto() + CPP_TEST_CLANG = auto() + CPP_TEST_GCC = auto() + CSHARP = auto() + CSHARP_DOTNET = auto() + CSHARP_MONO = auto() + CSHARP_TEST = auto() + C_CLANG = auto() + C_GCC = auto() + D = auto() + DART = auto() + ELIXIR = auto() + ERLANG = auto() + EXECUTABLE = auto() + FORTRAN = auto() + FSHARP = auto() + GO = auto() + GROOVY = auto() + HASKELL = auto() + JAVA = auto() + JAVAFX = auto() + JAVASCRIPT = auto() + JAVA_JDK = auto() + JAVA_OPENJDK = auto() + JAVA_TEST = auto() + KOTLIN = auto() + LUA = auto() + MPI_C = auto() + MPI_CPP = auto() + MPI_PYTHON = auto() + MULTI_FILE = auto() + NIM = auto() + OBJECTIVE_C = auto() + OCAML = auto() + OCTAVE = auto() + PASCAL = auto() + PERL = auto() + PHP = auto() + PLAIN_TEXT = auto() + PROLOG = auto() + PYTHON = auto() + PYTHON2 = auto() + PYTHON2_PYPY = auto() + PYTHON3 = auto() + PYTHON3_PYPY = auto() + PYTHON_FOR_ML = auto() + PYTHON_PYPY = auto() + R = auto() + RUBY = auto() + RUST = auto() + SCALA = auto() + SQLITE = auto() + SWIFT = auto() + TYPESCRIPT = auto() + VISUAL_BASIC = auto() class Flavor(IntEnum): diff --git a/src/judge0/data.py b/src/judge0/data.py index 1e759c2..39ad1b3 100644 --- a/src/judge0/data.py +++ b/src/judge0/data.py @@ -2,31 +2,165 @@ LANGUAGE_TO_LANGUAGE_ID = { "1.13.1": { - LanguageAlias.PYTHON: 71, - LanguageAlias.CPP: 54, - LanguageAlias.JAVA: 62, - LanguageAlias.CPP_GCC: 54, + LanguageAlias.ASSEMBLY: 45, + LanguageAlias.BASH: 46, + LanguageAlias.BASIC: 47, + LanguageAlias.C: 50, + LanguageAlias.CLOJURE: 86, + LanguageAlias.COBOL: 77, + LanguageAlias.COMMON_LISP: 55, + LanguageAlias.CPP: 52, LanguageAlias.CPP_CLANG: 76, + LanguageAlias.CPP_GCC: 52, + LanguageAlias.CSHARP: 51, + LanguageAlias.CSHARP_MONO: 51, + LanguageAlias.C_CLANG: 75, + LanguageAlias.C_GCC: 50, + LanguageAlias.D: 56, + LanguageAlias.ELIXIR: 57, + LanguageAlias.ERLANG: 58, + LanguageAlias.EXECUTABLE: 44, + LanguageAlias.FORTRAN: 59, + LanguageAlias.FSHARP: 87, + LanguageAlias.GO: 60, + LanguageAlias.GROOVY: 88, + LanguageAlias.HASKELL: 61, + LanguageAlias.JAVA: 62, + LanguageAlias.JAVASCRIPT: 63, + LanguageAlias.JAVA_OPENJDK: 62, + LanguageAlias.KOTLIN: 78, + LanguageAlias.LUA: 64, + LanguageAlias.MULTI_FILE: 89, + LanguageAlias.OBJECTIVE_C: 79, + LanguageAlias.OCAML: 65, + LanguageAlias.OCTAVE: 66, + LanguageAlias.PASCAL: 67, + LanguageAlias.PERL: 85, + LanguageAlias.PHP: 68, + LanguageAlias.PLAIN_TEXT: 43, + LanguageAlias.PROLOG: 69, + LanguageAlias.PYTHON: 71, + LanguageAlias.PYTHON2: 70, + LanguageAlias.PYTHON3: 71, + LanguageAlias.R: 80, + LanguageAlias.RUBY: 72, + LanguageAlias.RUST: 73, + LanguageAlias.SCALA: 81, + LanguageAlias.SQLITE: 82, + LanguageAlias.SWIFT: 83, + LanguageAlias.TYPESCRIPT: 74, + LanguageAlias.VISUAL_BASIC: 84, }, "1.13.1-extra": { - LanguageAlias.PYTHON: 10, + LanguageAlias.BOSQUE: 11, + LanguageAlias.C: 1, + LanguageAlias.C3: 3, LanguageAlias.CPP: 2, - LanguageAlias.JAVA: 4, LanguageAlias.CPP_CLANG: 2, + LanguageAlias.CPP_TEST: 12, + LanguageAlias.CPP_TEST_CLANG: 15, + LanguageAlias.CPP_TEST_GCC: 12, + LanguageAlias.CSHARP: 22, + LanguageAlias.CSHARP_MONO: 22, + LanguageAlias.CSHARP_DOTNET: 21, + LanguageAlias.CSHARP_TEST: 23, + LanguageAlias.C_CLANG: 1, + LanguageAlias.FSHARP: 24, + LanguageAlias.JAVA: 4, + LanguageAlias.JAVA_OPENJDK: 4, + LanguageAlias.JAVA_TEST: 5, + LanguageAlias.MPI_C: 6, + LanguageAlias.MPI_CPP: 7, + LanguageAlias.MPI_PYTHON: 8, + LanguageAlias.MULTI_FILE: 89, + LanguageAlias.NIM: 9, + LanguageAlias.PYTHON: 10, + LanguageAlias.PYTHON3: 10, LanguageAlias.PYTHON_FOR_ML: 10, + LanguageAlias.VISUAL_BASIC: 20, }, "1.14.0": { - LanguageAlias.PYTHON: 100, + LanguageAlias.ASSEMBLY: 45, + LanguageAlias.BASH: 46, + LanguageAlias.BASIC: 47, + LanguageAlias.C: 103, + LanguageAlias.CLOJURE: 86, + LanguageAlias.COBOL: 77, + LanguageAlias.COMMON_LISP: 55, LanguageAlias.CPP: 105, - LanguageAlias.JAVA: 91, - LanguageAlias.CPP_GCC: 105, LanguageAlias.CPP_CLANG: 76, + LanguageAlias.CPP_GCC: 105, + LanguageAlias.CSHARP: 51, + LanguageAlias.CSHARP_MONO: 51, + LanguageAlias.C_CLANG: 104, + LanguageAlias.C_GCC: 103, + LanguageAlias.D: 56, + LanguageAlias.DART: 90, + LanguageAlias.ELIXIR: 57, + LanguageAlias.ERLANG: 58, + LanguageAlias.EXECUTABLE: 44, + LanguageAlias.FORTRAN: 59, + LanguageAlias.FSHARP: 87, + LanguageAlias.GO: 95, + LanguageAlias.GROOVY: 88, + LanguageAlias.HASKELL: 61, + LanguageAlias.JAVA: 62, + LanguageAlias.JAVAFX: 96, + LanguageAlias.JAVASCRIPT: 102, + LanguageAlias.JAVA_JDK: 91, + LanguageAlias.JAVA_OPENJDK: 62, + LanguageAlias.KOTLIN: 78, + LanguageAlias.LUA: 64, + LanguageAlias.MULTI_FILE: 89, + LanguageAlias.OBJECTIVE_C: 79, + LanguageAlias.OCAML: 65, + LanguageAlias.OCTAVE: 66, + LanguageAlias.PASCAL: 67, + LanguageAlias.PERL: 85, + LanguageAlias.PHP: 98, + LanguageAlias.PLAIN_TEXT: 43, + LanguageAlias.PROLOG: 69, + LanguageAlias.PYTHON: 100, + LanguageAlias.PYTHON2: 70, + LanguageAlias.PYTHON3: 100, + LanguageAlias.R: 99, + LanguageAlias.RUBY: 72, + LanguageAlias.RUST: 73, + LanguageAlias.SCALA: 81, + LanguageAlias.SQLITE: 82, + LanguageAlias.SWIFT: 83, + LanguageAlias.TYPESCRIPT: 101, + LanguageAlias.VISUAL_BASIC: 84, }, "1.14.0-extra": { - LanguageAlias.PYTHON: 25, + LanguageAlias.BOSQUE: 11, + LanguageAlias.C: 1, + LanguageAlias.C3: 3, LanguageAlias.CPP: 2, - LanguageAlias.JAVA: 4, LanguageAlias.CPP_CLANG: 2, + LanguageAlias.CPP_TEST: 12, + LanguageAlias.CPP_TEST_CLANG: 15, + LanguageAlias.CPP_TEST_GCC: 12, + LanguageAlias.CSHARP: 29, + LanguageAlias.CSHARP_MONO: 22, + LanguageAlias.CSHARP_DOTNET: 29, + LanguageAlias.CSHARP_TEST: 23, + LanguageAlias.C_CLANG: 1, + LanguageAlias.FSHARP: 24, + LanguageAlias.JAVA: 4, + LanguageAlias.JAVA_OPENJDK: 4, + LanguageAlias.JAVA_TEST: 5, + LanguageAlias.MPI_C: 6, + LanguageAlias.MPI_CPP: 7, + LanguageAlias.MPI_PYTHON: 8, + LanguageAlias.MULTI_FILE: 89, + LanguageAlias.NIM: 9, + LanguageAlias.PYTHON: 25, + LanguageAlias.PYTHON2: 26, + LanguageAlias.PYTHON2_PYPY: 26, + LanguageAlias.PYTHON3: 25, + LanguageAlias.PYTHON3_PYPY: 28, LanguageAlias.PYTHON_FOR_ML: 25, + LanguageAlias.VISUAL_BASIC: 20, }, } From b28c1d64d983e23f71d9ca3a6dc4e9a23f3daff4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herman=20Zvonimir=20Do=C5=A1ilovi=C4=87?= Date: Tue, 24 Dec 2024 15:16:25 +0100 Subject: [PATCH 19/20] Add source_code as bytes --- examples/0006_exe.py | 9 +++++++++ src/judge0/submission.py | 2 +- tests/test_submission.py | 18 ++++++++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 examples/0006_exe.py diff --git a/examples/0006_exe.py b/examples/0006_exe.py new file mode 100644 index 0000000..81d4ada --- /dev/null +++ b/examples/0006_exe.py @@ -0,0 +1,9 @@ +from base64 import b64decode + +import judge0 + +source_code = b64decode( + "f0VMRgIBAQAAAAAAAAAAAAIAPgABAAAAAABAAAAAAABAAAAAAAAAAEAQAAAAAAAAAAAAAEAAOAABAEAABAADAAEAAAAFAAAAABAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAJQAAAAAAAAAlAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHAjVANsAG+GABAAInHDwUx/41HPA8FAGhlbGxvLCB3b3JsZAoALnNoc3RydGFiAC50ZXh0AC5yb2RhdGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAEAAAAGAAAAAAAAAAAAQAAAAAAAABAAAAAAAAAXAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABEAAAABAAAAAgAAAAAAAAAYAEAAAAAAABgQAAAAAAAADQAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAlEAAAAAAAABkAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAA" # noqa: E501 +) +result = judge0.run(source_code=source_code, language=judge0.EXECUTABLE) +print(result.stdout) diff --git a/src/judge0/submission.py b/src/judge0/submission.py index 10863c8..55b7660 100644 --- a/src/judge0/submission.py +++ b/src/judge0/submission.py @@ -126,7 +126,7 @@ class Submission(BaseModel): URL for a callback to report execution results or status. """ - source_code: Optional[str] = Field(default=None, repr=True) + source_code: Optional[Union[str, bytes]] = Field(default=None, repr=True) language: Union[LanguageAlias, int] = Field( default=LanguageAlias.PYTHON, repr=True, diff --git a/tests/test_submission.py b/tests/test_submission.py index fb1bf73..ddae140 100644 --- a/tests/test_submission.py +++ b/tests/test_submission.py @@ -1,3 +1,5 @@ +from base64 import b64decode + from judge0 import run, Status, Submission, wait from judge0.base_types import LanguageAlias @@ -92,3 +94,19 @@ def test_language_before_and_after_execution(request): assert submission.language == LanguageAlias.JAVA submission = run(client=client, submissions=submission) assert submission.language == LanguageAlias.JAVA + + +def test_language_executable(request): + client = request.getfixturevalue("judge0_ce_client") + code = b64decode( + "f0VMRgIBAQAAAAAAAAAAAAIAPgABAAAAAABAAAAAAABAAAAAAAAAAEAQAAAAAAAAAAAAAEAAOAABAEAABAADAAEAAAAFAAAAABAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAJQAAAAAAAAAlAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHAjVANsAG+GABAAInHDwUx/41HPA8FAGhlbGxvLCB3b3JsZAoALnNoc3RydGFiAC50ZXh0AC5yb2RhdGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAEAAAAGAAAAAAAAAAAAQAAAAAAAABAAAAAAAAAXAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABEAAAABAAAAAgAAAAAAAAAYAEAAAAAAABgQAAAAAAAADQAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAlEAAAAAAAABkAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAA" # noqa: E501 + ) + submission = Submission( + source_code=code, + language=LanguageAlias.EXECUTABLE, + ) + + assert submission.language == LanguageAlias.EXECUTABLE + submission = run(client=client, submissions=submission) + assert submission.language == LanguageAlias.EXECUTABLE + assert submission.stdout == "hello, world\n" From aa1d8123822ecb41c9df864e61a94355325bf949 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herman=20Zvonimir=20Do=C5=A1ilovi=C4=87?= Date: Tue, 24 Dec 2024 15:21:44 +0100 Subject: [PATCH 20/20] Prepare 0.0.3 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 257ab80..212569c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "judge0" -version = "0.0.2" +version = "0.0.3" description = "The official Python library for Judge0." readme = "README.md" requires-python = ">=3.9"