diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index b28fedbe02..ba7b709167 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -47,6 +47,7 @@ "ms-playwright.playwright", "ms-python.black-formatter", "ms-python.python", + "ms-toolsai.jupyter", "mtxr.sqltools-driver-mysql", "mtxr.sqltools-driver-pg", "mtxr.sqltools", diff --git a/apps/openchallenges/notebook/.gitignore b/apps/openchallenges/notebook/.gitignore index 58461f2542..68bc17f9ff 100644 --- a/apps/openchallenges/notebook/.gitignore +++ b/apps/openchallenges/notebook/.gitignore @@ -1 +1,160 @@ -.ipynb_checkpoints \ No newline at end of file +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/#use-with-ide +.pdm.toml + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +#.idea/ diff --git a/apps/openchallenges/notebook/.python-version b/apps/openchallenges/notebook/.python-version index 2009c7dfad..56d91d3534 100644 --- a/apps/openchallenges/notebook/.python-version +++ b/apps/openchallenges/notebook/.python-version @@ -1 +1 @@ -3.9.2 +3.10.12 diff --git a/apps/openchallenges/notebook/README.md b/apps/openchallenges/notebook/README.md new file mode 100644 index 0000000000..4c79644e42 --- /dev/null +++ b/apps/openchallenges/notebook/README.md @@ -0,0 +1,14 @@ +# OpenChallenges Notebook + +## Overview + +This project includes a collection of Jupyter notebooks that interact with OpenChallenges (OC) REST +API and other related APIs. + +## Update Python version + +1. Update the version of Python in + - `.python-version` + - `prepare-python.sh` + - `pyproject.toml` +2. Run `nx prepare openchallenges-notebook` \ No newline at end of file diff --git a/apps/openchallenges/notebook/notebooks/openai-challenge-headline.ipynb b/apps/openchallenges/notebook/notebooks/openai-challenge-headline.ipynb new file mode 100644 index 0000000000..6c1811e02e --- /dev/null +++ b/apps/openchallenges/notebook/notebooks/openai-challenge-headline.ipynb @@ -0,0 +1,286 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "34a39b07-385c-49b7-931f-3631a1aff129", + "metadata": { + "tags": [] + }, + "source": [ + "# OpenChallenges REST API Example" + ] + }, + { + "cell_type": "markdown", + "id": "ed72ae29-13e0-4533-8e7e-f13c9b34da1a", + "metadata": {}, + "source": [ + "## Overview" + ] + }, + { + "cell_type": "markdown", + "id": "b876938b-ae3a-49ba-b416-b9fd59f88ae7", + "metadata": {}, + "source": [ + "This notebook generates challenge headlines for challenges fetched from OpenChallenges (OC)." + ] + }, + { + "cell_type": "markdown", + "id": "7e95e24d-3f3a-47d0-bb52-35e718eb7ac6", + "metadata": {}, + "source": [ + "## Requirements" + ] + }, + { + "cell_type": "markdown", + "id": "cc586a81-e5b4-4021-9c6b-aa8a69ef221c", + "metadata": {}, + "source": [ + "- Access to OpenChallenges REST API\n", + "- Access to OpenAI API" + ] + }, + { + "cell_type": "markdown", + "id": "c90710c2-f053-44ae-a3c2-610eecff9073", + "metadata": {}, + "source": [ + "## List challenges" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "c41a64a1", + "metadata": {}, + "outputs": [], + "source": [ + "import openchallenges_client\n", + "from pprint import pprint\n", + "from openchallenges_client.api import challenge_api" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "8fc3ac4c-2ceb-4bbc-bdb8-3bb8be08dfc6", + "metadata": {}, + "outputs": [], + "source": [ + "# See configuration.py for a list of all supported configuration parameters.\n", + "configuration = openchallenges_client.Configuration(\n", + " host = \"https://openchallenges.io/api/v1\"\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "b2f952f5-9140-4702-8a96-3457ca4df841", + "metadata": {}, + "outputs": [], + "source": [ + "# Enter a context with an instance of the API client\n", + "challenges = []\n", + "with openchallenges_client.ApiClient(configuration) as api_client:\n", + " api_instance = challenge_api.ChallengeApi(api_client)\n", + " \n", + " query = openchallenges_client.ChallengeSearchQuery(page_number=1, page_size=1)\n", + "\n", + " try:\n", + " # Get the first page of the list of challenges\n", + " page = api_instance.list_challenges(query)\n", + " challenges.extend(page.challenges)\n", + " except openchallenges_client.ApiException as e:\n", + " print(\"Exception when calling ChallengeApi->list_challenges: %s\\n\" % e)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "6d590b17", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from dotenv import load_dotenv\n", + "\n", + "load_dotenv()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "488632df", + "metadata": {}, + "outputs": [], + "source": [ + "import openai" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "9158b9b9", + "metadata": {}, + "outputs": [], + "source": [ + "# Source: https://medium.com/muthoni-wanyoike/implementing-text-summarization-using-openais-gpt-3-api-dcd6be4f6933\n", + "def split_text(text):\n", + " max_chunk_size = 2048\n", + " chunks = []\n", + " current_chunk = \"\"\n", + " for sentence in text.split(\".\"):\n", + " if len(current_chunk) + len(sentence) < max_chunk_size:\n", + " current_chunk += sentence + \".\"\n", + " else:\n", + " chunks.append(current_chunk.strip())\n", + " current_chunk = sentence + \".\"\n", + " if current_chunk:\n", + " chunks.append(current_chunk.strip())\n", + " return chunks" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "1ea1b66b", + "metadata": {}, + "outputs": [], + "source": [ + "def generate_challenge_headline(text):\n", + " prompt=(\n", + " \"Please generate five headlines that have a maximum ten words from the following \"\n", + " \"challenge description. The headline must summarize the goal of the challenge. \"\n", + " f\"Description: \\n{text}\"\n", + " )\n", + " response = openai.ChatCompletion.create(\n", + " model=\"gpt-3.5-turbo\",\n", + " messages=[\n", + " {\"role\": \"system\", \"content\": \"You are a helpful assistant.\"},\n", + " {\"role\": \"user\", \"content\": prompt},\n", + " ],\n", + " max_tokens=1024,\n", + " temperature=0.5\n", + " )\n", + " return response['choices'][0]['message']['content']" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "d0c0b308-0b58-44a7-8ff6-4987dfbccb17", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "('1. NIDDK Data Centric Challenge: Enhancing Repository for AI Research\\n'\n", + " '2. Unlocking Insights: NIDDK Challenge Improves Data Quality for AI\\n'\n", + " \"3. NIDDK-CR's Data Centric Challenge: Advancing AI-driven Discovery\\n\"\n", + " '4. Bridging the Gap: NIDDK Challenge Boosts Data Collaboration for AI\\n'\n", + " '5. NIDDK Repository Challenge: Making Research Data FAIR for AI')\n" + ] + } + ], + "source": [ + "challenge = challenges[0]\n", + "result = generate_challenge_headline(challenge.description)\n", + "pprint(result)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "f2bd77de", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{\n", + " \"id\": 279,\n", + " \"slug\": \"niddk-central-repository-data-centric-challenge\",\n", + " \"name\": \"NIDDK Central Repository Data-Centric Challenge\",\n", + " \"headline\": \"Enhancing NIDDK datasets for future Artificial Intelligence (AI) applications.\",\n", + " \"headline_alternatives\": [\n", + " \"1. NIDDK Data Centric Challenge: Enhancing Repository for AI Research\",\n", + " \"2. Unlocking Insights: NIDDK Challenge Improves Data Quality for AI\",\n", + " \"3. NIDDK-CR's Data Centric Challenge: Advancing AI-driven Discovery\",\n", + " \"4. Bridging the Gap: NIDDK Challenge Boosts Data Collaboration for AI\",\n", + " \"5. NIDDK Repository Challenge: Making Research Data FAIR for AI\"\n", + " ]\n", + "}\n" + ] + } + ], + "source": [ + "from itertools import compress\n", + "import json\n", + "\n", + "raw_headlines = result.splitlines()\n", + "\n", + "def is_raw_headline(raw_headline):\n", + " prefixes = (\"1. \", \"2. \", \"3. \", \"4. \", \"5. \")\n", + " return raw_headline.startswith(prefixes)\n", + "\n", + "headlines = list(compress(raw_headlines, map(is_raw_headline, raw_headlines)))\n", + "\n", + "obj = {\n", + " \"id\": challenge.id,\n", + " \"slug\": challenge.slug,\n", + " \"name\": challenge.name,\n", + " \"headline\": challenge.headline,\n", + " \"headline_alternatives\": headlines\n", + "}\n", + "json_str = json.dumps(obj, indent=2)\n", + "\n", + "print(json_str)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "20da8b0e", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/apps/openchallenges/notebook/notebooks/openchallenges-api.ipynb b/apps/openchallenges/notebook/notebooks/openchallenges-api.ipynb new file mode 100644 index 0000000000..c8ecd92c81 --- /dev/null +++ b/apps/openchallenges/notebook/notebooks/openchallenges-api.ipynb @@ -0,0 +1,187 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "34a39b07-385c-49b7-931f-3631a1aff129", + "metadata": { + "tags": [] + }, + "source": [ + "# OpenChallenges REST API Example" + ] + }, + { + "cell_type": "markdown", + "id": "ed72ae29-13e0-4533-8e7e-f13c9b34da1a", + "metadata": {}, + "source": [ + "## Overview" + ] + }, + { + "cell_type": "markdown", + "id": "b876938b-ae3a-49ba-b416-b9fd59f88ae7", + "metadata": {}, + "source": [ + "This notebook shows how to use OpenChallenges (OC) API client for Python to query challenge resources." + ] + }, + { + "cell_type": "markdown", + "id": "7e95e24d-3f3a-47d0-bb52-35e718eb7ac6", + "metadata": {}, + "source": [ + "## Requirements" + ] + }, + { + "cell_type": "markdown", + "id": "cc586a81-e5b4-4021-9c6b-aa8a69ef221c", + "metadata": {}, + "source": [ + "The OpenChallenges REST API must be already running." + ] + }, + { + "cell_type": "markdown", + "id": "c90710c2-f053-44ae-a3c2-610eecff9073", + "metadata": {}, + "source": [ + "## List challenges" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "c41a64a1", + "metadata": {}, + "outputs": [], + "source": [ + "import openchallenges_client\n", + "from pprint import pprint\n", + "from openchallenges_client.api import challenge_api" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "8fc3ac4c-2ceb-4bbc-bdb8-3bb8be08dfc6", + "metadata": {}, + "outputs": [], + "source": [ + "# See configuration.py for a list of all supported configuration parameters.\n", + "configuration = openchallenges_client.Configuration(\n", + " host = \"http://localhost:8000/api/v1\"\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "2f855989-f0a9-4fa0-a8f8-63edba2fdb38", + "metadata": {}, + "source": [ + "> **Note** The hostname `openchallenges-apex` is defined in `/etc/hosts`. The dev container provided with this project is responsible for definining the required hostnames. By default, the hostnames are mapped to `127.0.0.1`." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "b2f952f5-9140-4702-8a96-3457ca4df841", + "metadata": {}, + "outputs": [ + { + "ename": "MaxRetryError", + "evalue": "HTTPConnectionPool(host='localhost', port=8000): Max retries exceeded with url: /api/v1/challenges?challengeSearchQuery=%7B%22pageNumber%22%3A%201%2C%20%22pageSize%22%3A%201%7D (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused'))", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mConnectionRefusedError\u001b[0m Traceback (most recent call last)", + "File \u001b[0;32m/workspaces/sage-monorepo/apps/openchallenges/notebook/.venv/lib/python3.10/site-packages/urllib3/connection.py:203\u001b[0m, in \u001b[0;36mHTTPConnection._new_conn\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 202\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[0;32m--> 203\u001b[0m sock \u001b[39m=\u001b[39m connection\u001b[39m.\u001b[39;49mcreate_connection(\n\u001b[1;32m 204\u001b[0m (\u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_dns_host, \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mport),\n\u001b[1;32m 205\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mtimeout,\n\u001b[1;32m 206\u001b[0m source_address\u001b[39m=\u001b[39;49m\u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49msource_address,\n\u001b[1;32m 207\u001b[0m socket_options\u001b[39m=\u001b[39;49m\u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49msocket_options,\n\u001b[1;32m 208\u001b[0m )\n\u001b[1;32m 209\u001b[0m \u001b[39mexcept\u001b[39;00m socket\u001b[39m.\u001b[39mgaierror \u001b[39mas\u001b[39;00m e:\n", + "File \u001b[0;32m/workspaces/sage-monorepo/apps/openchallenges/notebook/.venv/lib/python3.10/site-packages/urllib3/util/connection.py:85\u001b[0m, in \u001b[0;36mcreate_connection\u001b[0;34m(address, timeout, source_address, socket_options)\u001b[0m\n\u001b[1;32m 84\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[0;32m---> 85\u001b[0m \u001b[39mraise\u001b[39;00m err\n\u001b[1;32m 86\u001b[0m \u001b[39mfinally\u001b[39;00m:\n\u001b[1;32m 87\u001b[0m \u001b[39m# Break explicitly a reference cycle\u001b[39;00m\n", + "File \u001b[0;32m/workspaces/sage-monorepo/apps/openchallenges/notebook/.venv/lib/python3.10/site-packages/urllib3/util/connection.py:73\u001b[0m, in \u001b[0;36mcreate_connection\u001b[0;34m(address, timeout, source_address, socket_options)\u001b[0m\n\u001b[1;32m 72\u001b[0m sock\u001b[39m.\u001b[39mbind(source_address)\n\u001b[0;32m---> 73\u001b[0m sock\u001b[39m.\u001b[39;49mconnect(sa)\n\u001b[1;32m 74\u001b[0m \u001b[39m# Break explicitly a reference cycle\u001b[39;00m\n", + "\u001b[0;31mConnectionRefusedError\u001b[0m: [Errno 111] Connection refused", + "\nThe above exception was the direct cause of the following exception:\n", + "\u001b[0;31mNewConnectionError\u001b[0m Traceback (most recent call last)", + "File \u001b[0;32m/workspaces/sage-monorepo/apps/openchallenges/notebook/.venv/lib/python3.10/site-packages/urllib3/connectionpool.py:791\u001b[0m, in \u001b[0;36mHTTPConnectionPool.urlopen\u001b[0;34m(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, preload_content, decode_content, **response_kw)\u001b[0m\n\u001b[1;32m 790\u001b[0m \u001b[39m# Make the request on the HTTPConnection object\u001b[39;00m\n\u001b[0;32m--> 791\u001b[0m response \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_make_request(\n\u001b[1;32m 792\u001b[0m conn,\n\u001b[1;32m 793\u001b[0m method,\n\u001b[1;32m 794\u001b[0m url,\n\u001b[1;32m 795\u001b[0m timeout\u001b[39m=\u001b[39;49mtimeout_obj,\n\u001b[1;32m 796\u001b[0m body\u001b[39m=\u001b[39;49mbody,\n\u001b[1;32m 797\u001b[0m headers\u001b[39m=\u001b[39;49mheaders,\n\u001b[1;32m 798\u001b[0m chunked\u001b[39m=\u001b[39;49mchunked,\n\u001b[1;32m 799\u001b[0m retries\u001b[39m=\u001b[39;49mretries,\n\u001b[1;32m 800\u001b[0m response_conn\u001b[39m=\u001b[39;49mresponse_conn,\n\u001b[1;32m 801\u001b[0m preload_content\u001b[39m=\u001b[39;49mpreload_content,\n\u001b[1;32m 802\u001b[0m decode_content\u001b[39m=\u001b[39;49mdecode_content,\n\u001b[1;32m 803\u001b[0m \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mresponse_kw,\n\u001b[1;32m 804\u001b[0m )\n\u001b[1;32m 806\u001b[0m \u001b[39m# Everything went great!\u001b[39;00m\n", + "File \u001b[0;32m/workspaces/sage-monorepo/apps/openchallenges/notebook/.venv/lib/python3.10/site-packages/urllib3/connectionpool.py:497\u001b[0m, in \u001b[0;36mHTTPConnectionPool._make_request\u001b[0;34m(self, conn, method, url, body, headers, retries, timeout, chunked, response_conn, preload_content, decode_content, enforce_content_length)\u001b[0m\n\u001b[1;32m 496\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[0;32m--> 497\u001b[0m conn\u001b[39m.\u001b[39;49mrequest(\n\u001b[1;32m 498\u001b[0m method,\n\u001b[1;32m 499\u001b[0m url,\n\u001b[1;32m 500\u001b[0m body\u001b[39m=\u001b[39;49mbody,\n\u001b[1;32m 501\u001b[0m headers\u001b[39m=\u001b[39;49mheaders,\n\u001b[1;32m 502\u001b[0m chunked\u001b[39m=\u001b[39;49mchunked,\n\u001b[1;32m 503\u001b[0m preload_content\u001b[39m=\u001b[39;49mpreload_content,\n\u001b[1;32m 504\u001b[0m decode_content\u001b[39m=\u001b[39;49mdecode_content,\n\u001b[1;32m 505\u001b[0m enforce_content_length\u001b[39m=\u001b[39;49menforce_content_length,\n\u001b[1;32m 506\u001b[0m )\n\u001b[1;32m 508\u001b[0m \u001b[39m# We are swallowing BrokenPipeError (errno.EPIPE) since the server is\u001b[39;00m\n\u001b[1;32m 509\u001b[0m \u001b[39m# legitimately able to close the connection after sending a valid response.\u001b[39;00m\n\u001b[1;32m 510\u001b[0m \u001b[39m# With this behaviour, the received response is still readable.\u001b[39;00m\n", + "File \u001b[0;32m/workspaces/sage-monorepo/apps/openchallenges/notebook/.venv/lib/python3.10/site-packages/urllib3/connection.py:395\u001b[0m, in \u001b[0;36mHTTPConnection.request\u001b[0;34m(self, method, url, body, headers, chunked, preload_content, decode_content, enforce_content_length)\u001b[0m\n\u001b[1;32m 394\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mputheader(header, value)\n\u001b[0;32m--> 395\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mendheaders()\n\u001b[1;32m 397\u001b[0m \u001b[39m# If we're given a body we start sending that in chunks.\u001b[39;00m\n", + "File \u001b[0;32m~/.pyenv/versions/3.10.12/lib/python3.10/http/client.py:1278\u001b[0m, in \u001b[0;36mHTTPConnection.endheaders\u001b[0;34m(self, message_body, encode_chunked)\u001b[0m\n\u001b[1;32m 1277\u001b[0m \u001b[39mraise\u001b[39;00m CannotSendHeader()\n\u001b[0;32m-> 1278\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_send_output(message_body, encode_chunked\u001b[39m=\u001b[39;49mencode_chunked)\n", + "File \u001b[0;32m~/.pyenv/versions/3.10.12/lib/python3.10/http/client.py:1038\u001b[0m, in \u001b[0;36mHTTPConnection._send_output\u001b[0;34m(self, message_body, encode_chunked)\u001b[0m\n\u001b[1;32m 1037\u001b[0m \u001b[39mdel\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_buffer[:]\n\u001b[0;32m-> 1038\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49msend(msg)\n\u001b[1;32m 1040\u001b[0m \u001b[39mif\u001b[39;00m message_body \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[1;32m 1041\u001b[0m \n\u001b[1;32m 1042\u001b[0m \u001b[39m# create a consistent interface to message_body\u001b[39;00m\n", + "File \u001b[0;32m~/.pyenv/versions/3.10.12/lib/python3.10/http/client.py:976\u001b[0m, in \u001b[0;36mHTTPConnection.send\u001b[0;34m(self, data)\u001b[0m\n\u001b[1;32m 975\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mauto_open:\n\u001b[0;32m--> 976\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mconnect()\n\u001b[1;32m 977\u001b[0m \u001b[39melse\u001b[39;00m:\n", + "File \u001b[0;32m/workspaces/sage-monorepo/apps/openchallenges/notebook/.venv/lib/python3.10/site-packages/urllib3/connection.py:243\u001b[0m, in \u001b[0;36mHTTPConnection.connect\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 242\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39mconnect\u001b[39m(\u001b[39mself\u001b[39m) \u001b[39m-\u001b[39m\u001b[39m>\u001b[39m \u001b[39mNone\u001b[39;00m:\n\u001b[0;32m--> 243\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39msock \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_new_conn()\n\u001b[1;32m 244\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_tunnel_host:\n\u001b[1;32m 245\u001b[0m \u001b[39m# If we're tunneling it means we're connected to our proxy.\u001b[39;00m\n", + "File \u001b[0;32m/workspaces/sage-monorepo/apps/openchallenges/notebook/.venv/lib/python3.10/site-packages/urllib3/connection.py:218\u001b[0m, in \u001b[0;36mHTTPConnection._new_conn\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 217\u001b[0m \u001b[39mexcept\u001b[39;00m \u001b[39mOSError\u001b[39;00m \u001b[39mas\u001b[39;00m e:\n\u001b[0;32m--> 218\u001b[0m \u001b[39mraise\u001b[39;00m NewConnectionError(\n\u001b[1;32m 219\u001b[0m \u001b[39mself\u001b[39m, \u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39mFailed to establish a new connection: \u001b[39m\u001b[39m{\u001b[39;00me\u001b[39m}\u001b[39;00m\u001b[39m\"\u001b[39m\n\u001b[1;32m 220\u001b[0m ) \u001b[39mfrom\u001b[39;00m \u001b[39me\u001b[39;00m\n\u001b[1;32m 222\u001b[0m \u001b[39m# Audit hooks are only available in Python 3.8+\u001b[39;00m\n", + "\u001b[0;31mNewConnectionError\u001b[0m: : Failed to establish a new connection: [Errno 111] Connection refused", + "\nThe above exception was the direct cause of the following exception:\n", + "\u001b[0;31mMaxRetryError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m/workspaces/sage-monorepo/apps/openchallenges/notebook/notebooks/openchallenges-api.ipynb Cell 10\u001b[0m line \u001b[0;36m9\n\u001b[1;32m 5\u001b[0m query \u001b[39m=\u001b[39m openchallenges_client\u001b[39m.\u001b[39mChallengeSearchQuery(page_number\u001b[39m=\u001b[39m\u001b[39m1\u001b[39m, page_size\u001b[39m=\u001b[39m\u001b[39m1\u001b[39m)\n\u001b[1;32m 7\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[1;32m 8\u001b[0m \u001b[39m# Get the first page of the list of challenges\u001b[39;00m\n\u001b[0;32m----> 9\u001b[0m api_response \u001b[39m=\u001b[39m api_instance\u001b[39m.\u001b[39;49mlist_challenges(query)\n\u001b[1;32m 10\u001b[0m pprint(api_response)\n\u001b[1;32m 11\u001b[0m \u001b[39mexcept\u001b[39;00m openchallenges_client\u001b[39m.\u001b[39mApiException \u001b[39mas\u001b[39;00m e:\n", + "File \u001b[0;32m/workspaces/sage-monorepo/apps/openchallenges/notebook/.venv/lib/python3.10/site-packages/pydantic/decorator.py:40\u001b[0m, in \u001b[0;36mpydantic.decorator.validate_arguments.validate.wrapper_function\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32m/workspaces/sage-monorepo/apps/openchallenges/notebook/.venv/lib/python3.10/site-packages/pydantic/decorator.py:134\u001b[0m, in \u001b[0;36mpydantic.decorator.ValidatedFunction.call\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32m/workspaces/sage-monorepo/apps/openchallenges/notebook/.venv/lib/python3.10/site-packages/pydantic/decorator.py:206\u001b[0m, in \u001b[0;36mpydantic.decorator.ValidatedFunction.execute\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32m/workspaces/sage-monorepo/apps/openchallenges/notebook/.venv/lib/python3.10/site-packages/openchallenges_client/api/challenge_api.py:218\u001b[0m, in \u001b[0;36mChallengeApi.list_challenges\u001b[0;34m(self, challenge_search_query, **kwargs)\u001b[0m\n\u001b[1;32m 216\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39m'\u001b[39m\u001b[39m_preload_content\u001b[39m\u001b[39m'\u001b[39m \u001b[39min\u001b[39;00m kwargs:\n\u001b[1;32m 217\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mValueError\u001b[39;00m(\u001b[39m\"\u001b[39m\u001b[39mError! Please call the list_challenges_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data\u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[0;32m--> 218\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mlist_challenges_with_http_info(challenge_search_query, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n", + "File \u001b[0;32m/workspaces/sage-monorepo/apps/openchallenges/notebook/.venv/lib/python3.10/site-packages/pydantic/decorator.py:40\u001b[0m, in \u001b[0;36mpydantic.decorator.validate_arguments.validate.wrapper_function\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32m/workspaces/sage-monorepo/apps/openchallenges/notebook/.venv/lib/python3.10/site-packages/pydantic/decorator.py:134\u001b[0m, in \u001b[0;36mpydantic.decorator.ValidatedFunction.call\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32m/workspaces/sage-monorepo/apps/openchallenges/notebook/.venv/lib/python3.10/site-packages/pydantic/decorator.py:206\u001b[0m, in \u001b[0;36mpydantic.decorator.ValidatedFunction.execute\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32m/workspaces/sage-monorepo/apps/openchallenges/notebook/.venv/lib/python3.10/site-packages/openchallenges_client/api/challenge_api.py:315\u001b[0m, in \u001b[0;36mChallengeApi.list_challenges_with_http_info\u001b[0;34m(self, challenge_search_query, **kwargs)\u001b[0m\n\u001b[1;32m 307\u001b[0m _auth_settings \u001b[39m=\u001b[39m [] \u001b[39m# noqa: E501\u001b[39;00m\n\u001b[1;32m 309\u001b[0m _response_types_map \u001b[39m=\u001b[39m {\n\u001b[1;32m 310\u001b[0m \u001b[39m'\u001b[39m\u001b[39m200\u001b[39m\u001b[39m'\u001b[39m: \u001b[39m\"\u001b[39m\u001b[39mChallengesPage\u001b[39m\u001b[39m\"\u001b[39m,\n\u001b[1;32m 311\u001b[0m \u001b[39m'\u001b[39m\u001b[39m400\u001b[39m\u001b[39m'\u001b[39m: \u001b[39m\"\u001b[39m\u001b[39mBasicError\u001b[39m\u001b[39m\"\u001b[39m,\n\u001b[1;32m 312\u001b[0m \u001b[39m'\u001b[39m\u001b[39m500\u001b[39m\u001b[39m'\u001b[39m: \u001b[39m\"\u001b[39m\u001b[39mBasicError\u001b[39m\u001b[39m\"\u001b[39m,\n\u001b[1;32m 313\u001b[0m }\n\u001b[0;32m--> 315\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mapi_client\u001b[39m.\u001b[39;49mcall_api(\n\u001b[1;32m 316\u001b[0m \u001b[39m'\u001b[39;49m\u001b[39m/challenges\u001b[39;49m\u001b[39m'\u001b[39;49m, \u001b[39m'\u001b[39;49m\u001b[39mGET\u001b[39;49m\u001b[39m'\u001b[39;49m,\n\u001b[1;32m 317\u001b[0m _path_params,\n\u001b[1;32m 318\u001b[0m _query_params,\n\u001b[1;32m 319\u001b[0m _header_params,\n\u001b[1;32m 320\u001b[0m body\u001b[39m=\u001b[39;49m_body_params,\n\u001b[1;32m 321\u001b[0m post_params\u001b[39m=\u001b[39;49m_form_params,\n\u001b[1;32m 322\u001b[0m files\u001b[39m=\u001b[39;49m_files,\n\u001b[1;32m 323\u001b[0m response_types_map\u001b[39m=\u001b[39;49m_response_types_map,\n\u001b[1;32m 324\u001b[0m auth_settings\u001b[39m=\u001b[39;49m_auth_settings,\n\u001b[1;32m 325\u001b[0m async_req\u001b[39m=\u001b[39;49m_params\u001b[39m.\u001b[39;49mget(\u001b[39m'\u001b[39;49m\u001b[39masync_req\u001b[39;49m\u001b[39m'\u001b[39;49m),\n\u001b[1;32m 326\u001b[0m _return_http_data_only\u001b[39m=\u001b[39;49m_params\u001b[39m.\u001b[39;49mget(\u001b[39m'\u001b[39;49m\u001b[39m_return_http_data_only\u001b[39;49m\u001b[39m'\u001b[39;49m), \u001b[39m# noqa: E501\u001b[39;49;00m\n\u001b[1;32m 327\u001b[0m _preload_content\u001b[39m=\u001b[39;49m_params\u001b[39m.\u001b[39;49mget(\u001b[39m'\u001b[39;49m\u001b[39m_preload_content\u001b[39;49m\u001b[39m'\u001b[39;49m, \u001b[39mTrue\u001b[39;49;00m),\n\u001b[1;32m 328\u001b[0m _request_timeout\u001b[39m=\u001b[39;49m_params\u001b[39m.\u001b[39;49mget(\u001b[39m'\u001b[39;49m\u001b[39m_request_timeout\u001b[39;49m\u001b[39m'\u001b[39;49m),\n\u001b[1;32m 329\u001b[0m collection_formats\u001b[39m=\u001b[39;49m_collection_formats,\n\u001b[1;32m 330\u001b[0m _request_auth\u001b[39m=\u001b[39;49m_params\u001b[39m.\u001b[39;49mget(\u001b[39m'\u001b[39;49m\u001b[39m_request_auth\u001b[39;49m\u001b[39m'\u001b[39;49m))\n", + "File \u001b[0;32m/workspaces/sage-monorepo/apps/openchallenges/notebook/.venv/lib/python3.10/site-packages/openchallenges_client/api_client.py:406\u001b[0m, in \u001b[0;36mApiClient.call_api\u001b[0;34m(self, resource_path, method, path_params, query_params, header_params, body, post_params, files, response_types_map, auth_settings, async_req, _return_http_data_only, collection_formats, _preload_content, _request_timeout, _host, _request_auth)\u001b[0m\n\u001b[1;32m 364\u001b[0m \u001b[39m\u001b[39m\u001b[39m\"\"\"Makes the HTTP request (synchronous) and returns deserialized data.\u001b[39;00m\n\u001b[1;32m 365\u001b[0m \n\u001b[1;32m 366\u001b[0m \u001b[39mTo make an async_req request, set the async_req parameter.\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 403\u001b[0m \u001b[39m then the method will return the response directly.\u001b[39;00m\n\u001b[1;32m 404\u001b[0m \u001b[39m\"\"\"\u001b[39;00m\n\u001b[1;32m 405\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mnot\u001b[39;00m async_req:\n\u001b[0;32m--> 406\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m__call_api(resource_path, method,\n\u001b[1;32m 407\u001b[0m path_params, query_params, header_params,\n\u001b[1;32m 408\u001b[0m body, post_params, files,\n\u001b[1;32m 409\u001b[0m response_types_map, auth_settings,\n\u001b[1;32m 410\u001b[0m _return_http_data_only, collection_formats,\n\u001b[1;32m 411\u001b[0m _preload_content, _request_timeout, _host,\n\u001b[1;32m 412\u001b[0m _request_auth)\n\u001b[1;32m 414\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mpool\u001b[39m.\u001b[39mapply_async(\u001b[39mself\u001b[39m\u001b[39m.\u001b[39m__call_api, (resource_path,\n\u001b[1;32m 415\u001b[0m method, path_params,\n\u001b[1;32m 416\u001b[0m query_params,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 424\u001b[0m _request_timeout,\n\u001b[1;32m 425\u001b[0m _host, _request_auth))\n", + "File \u001b[0;32m/workspaces/sage-monorepo/apps/openchallenges/notebook/.venv/lib/python3.10/site-packages/openchallenges_client/api_client.py:211\u001b[0m, in \u001b[0;36mApiClient.__call_api\u001b[0;34m(self, resource_path, method, path_params, query_params, header_params, body, post_params, files, response_types_map, auth_settings, _return_http_data_only, collection_formats, _preload_content, _request_timeout, _host, _request_auth)\u001b[0m\n\u001b[1;32m 207\u001b[0m url \u001b[39m+\u001b[39m\u001b[39m=\u001b[39m \u001b[39m\"\u001b[39m\u001b[39m?\u001b[39m\u001b[39m\"\u001b[39m \u001b[39m+\u001b[39m url_query\n\u001b[1;32m 209\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[1;32m 210\u001b[0m \u001b[39m# perform request and return response\u001b[39;00m\n\u001b[0;32m--> 211\u001b[0m response_data \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mrequest(\n\u001b[1;32m 212\u001b[0m method, url,\n\u001b[1;32m 213\u001b[0m query_params\u001b[39m=\u001b[39;49mquery_params,\n\u001b[1;32m 214\u001b[0m headers\u001b[39m=\u001b[39;49mheader_params,\n\u001b[1;32m 215\u001b[0m post_params\u001b[39m=\u001b[39;49mpost_params, body\u001b[39m=\u001b[39;49mbody,\n\u001b[1;32m 216\u001b[0m _preload_content\u001b[39m=\u001b[39;49m_preload_content,\n\u001b[1;32m 217\u001b[0m _request_timeout\u001b[39m=\u001b[39;49m_request_timeout)\n\u001b[1;32m 218\u001b[0m \u001b[39mexcept\u001b[39;00m ApiException \u001b[39mas\u001b[39;00m e:\n\u001b[1;32m 219\u001b[0m \u001b[39mif\u001b[39;00m e\u001b[39m.\u001b[39mbody:\n", + "File \u001b[0;32m/workspaces/sage-monorepo/apps/openchallenges/notebook/.venv/lib/python3.10/site-packages/openchallenges_client/api_client.py:432\u001b[0m, in \u001b[0;36mApiClient.request\u001b[0;34m(self, method, url, query_params, headers, post_params, body, _preload_content, _request_timeout)\u001b[0m\n\u001b[1;32m 430\u001b[0m \u001b[39m\u001b[39m\u001b[39m\"\"\"Makes the HTTP request using RESTClient.\"\"\"\u001b[39;00m\n\u001b[1;32m 431\u001b[0m \u001b[39mif\u001b[39;00m method \u001b[39m==\u001b[39m \u001b[39m\"\u001b[39m\u001b[39mGET\u001b[39m\u001b[39m\"\u001b[39m:\n\u001b[0;32m--> 432\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mrest_client\u001b[39m.\u001b[39;49mget_request(url,\n\u001b[1;32m 433\u001b[0m query_params\u001b[39m=\u001b[39;49mquery_params,\n\u001b[1;32m 434\u001b[0m _preload_content\u001b[39m=\u001b[39;49m_preload_content,\n\u001b[1;32m 435\u001b[0m _request_timeout\u001b[39m=\u001b[39;49m_request_timeout,\n\u001b[1;32m 436\u001b[0m headers\u001b[39m=\u001b[39;49mheaders)\n\u001b[1;32m 437\u001b[0m \u001b[39melif\u001b[39;00m method \u001b[39m==\u001b[39m \u001b[39m\"\u001b[39m\u001b[39mHEAD\u001b[39m\u001b[39m\"\u001b[39m:\n\u001b[1;32m 438\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mrest_client\u001b[39m.\u001b[39mhead_request(url,\n\u001b[1;32m 439\u001b[0m query_params\u001b[39m=\u001b[39mquery_params,\n\u001b[1;32m 440\u001b[0m _preload_content\u001b[39m=\u001b[39m_preload_content,\n\u001b[1;32m 441\u001b[0m _request_timeout\u001b[39m=\u001b[39m_request_timeout,\n\u001b[1;32m 442\u001b[0m headers\u001b[39m=\u001b[39mheaders)\n", + "File \u001b[0;32m/workspaces/sage-monorepo/apps/openchallenges/notebook/.venv/lib/python3.10/site-packages/openchallenges_client/rest.py:242\u001b[0m, in \u001b[0;36mRESTClientObject.get_request\u001b[0;34m(self, url, headers, query_params, _preload_content, _request_timeout)\u001b[0m\n\u001b[1;32m 240\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39mget_request\u001b[39m(\u001b[39mself\u001b[39m, url, headers\u001b[39m=\u001b[39m\u001b[39mNone\u001b[39;00m, query_params\u001b[39m=\u001b[39m\u001b[39mNone\u001b[39;00m, _preload_content\u001b[39m=\u001b[39m\u001b[39mTrue\u001b[39;00m,\n\u001b[1;32m 241\u001b[0m _request_timeout\u001b[39m=\u001b[39m\u001b[39mNone\u001b[39;00m):\n\u001b[0;32m--> 242\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mrequest(\u001b[39m\"\u001b[39;49m\u001b[39mGET\u001b[39;49m\u001b[39m\"\u001b[39;49m, url,\n\u001b[1;32m 243\u001b[0m headers\u001b[39m=\u001b[39;49mheaders,\n\u001b[1;32m 244\u001b[0m _preload_content\u001b[39m=\u001b[39;49m_preload_content,\n\u001b[1;32m 245\u001b[0m _request_timeout\u001b[39m=\u001b[39;49m_request_timeout,\n\u001b[1;32m 246\u001b[0m query_params\u001b[39m=\u001b[39;49mquery_params)\n", + "File \u001b[0;32m/workspaces/sage-monorepo/apps/openchallenges/notebook/.venv/lib/python3.10/site-packages/openchallenges_client/rest.py:205\u001b[0m, in \u001b[0;36mRESTClientObject.request\u001b[0;34m(self, method, url, query_params, headers, body, post_params, _preload_content, _request_timeout)\u001b[0m\n\u001b[1;32m 202\u001b[0m \u001b[39mraise\u001b[39;00m ApiException(status\u001b[39m=\u001b[39m\u001b[39m0\u001b[39m, reason\u001b[39m=\u001b[39mmsg)\n\u001b[1;32m 203\u001b[0m \u001b[39m# For `GET`, `HEAD`\u001b[39;00m\n\u001b[1;32m 204\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[0;32m--> 205\u001b[0m r \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mpool_manager\u001b[39m.\u001b[39;49mrequest(method, url,\n\u001b[1;32m 206\u001b[0m fields\u001b[39m=\u001b[39;49m{},\n\u001b[1;32m 207\u001b[0m preload_content\u001b[39m=\u001b[39;49m_preload_content,\n\u001b[1;32m 208\u001b[0m timeout\u001b[39m=\u001b[39;49mtimeout,\n\u001b[1;32m 209\u001b[0m headers\u001b[39m=\u001b[39;49mheaders)\n\u001b[1;32m 210\u001b[0m \u001b[39mexcept\u001b[39;00m urllib3\u001b[39m.\u001b[39mexceptions\u001b[39m.\u001b[39mSSLError \u001b[39mas\u001b[39;00m e:\n\u001b[1;32m 211\u001b[0m msg \u001b[39m=\u001b[39m \u001b[39m\"\u001b[39m\u001b[39m{0}\u001b[39;00m\u001b[39m\\n\u001b[39;00m\u001b[39m{1}\u001b[39;00m\u001b[39m\"\u001b[39m\u001b[39m.\u001b[39mformat(\u001b[39mtype\u001b[39m(e)\u001b[39m.\u001b[39m\u001b[39m__name__\u001b[39m, \u001b[39mstr\u001b[39m(e))\n", + "File \u001b[0;32m/workspaces/sage-monorepo/apps/openchallenges/notebook/.venv/lib/python3.10/site-packages/urllib3/_request_methods.py:110\u001b[0m, in \u001b[0;36mRequestMethods.request\u001b[0;34m(self, method, url, body, fields, headers, json, **urlopen_kw)\u001b[0m\n\u001b[1;32m 107\u001b[0m urlopen_kw[\u001b[39m\"\u001b[39m\u001b[39mbody\u001b[39m\u001b[39m\"\u001b[39m] \u001b[39m=\u001b[39m body\n\u001b[1;32m 109\u001b[0m \u001b[39mif\u001b[39;00m method \u001b[39min\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_encode_url_methods:\n\u001b[0;32m--> 110\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mrequest_encode_url(\n\u001b[1;32m 111\u001b[0m method,\n\u001b[1;32m 112\u001b[0m url,\n\u001b[1;32m 113\u001b[0m fields\u001b[39m=\u001b[39;49mfields, \u001b[39m# type: ignore[arg-type]\u001b[39;49;00m\n\u001b[1;32m 114\u001b[0m headers\u001b[39m=\u001b[39;49mheaders,\n\u001b[1;32m 115\u001b[0m \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49murlopen_kw,\n\u001b[1;32m 116\u001b[0m )\n\u001b[1;32m 117\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[1;32m 118\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mrequest_encode_body(\n\u001b[1;32m 119\u001b[0m method, url, fields\u001b[39m=\u001b[39mfields, headers\u001b[39m=\u001b[39mheaders, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39murlopen_kw\n\u001b[1;32m 120\u001b[0m )\n", + "File \u001b[0;32m/workspaces/sage-monorepo/apps/openchallenges/notebook/.venv/lib/python3.10/site-packages/urllib3/_request_methods.py:143\u001b[0m, in \u001b[0;36mRequestMethods.request_encode_url\u001b[0;34m(self, method, url, fields, headers, **urlopen_kw)\u001b[0m\n\u001b[1;32m 140\u001b[0m \u001b[39mif\u001b[39;00m fields:\n\u001b[1;32m 141\u001b[0m url \u001b[39m+\u001b[39m\u001b[39m=\u001b[39m \u001b[39m\"\u001b[39m\u001b[39m?\u001b[39m\u001b[39m\"\u001b[39m \u001b[39m+\u001b[39m urlencode(fields)\n\u001b[0;32m--> 143\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49murlopen(method, url, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mextra_kw)\n", + "File \u001b[0;32m/workspaces/sage-monorepo/apps/openchallenges/notebook/.venv/lib/python3.10/site-packages/urllib3/poolmanager.py:443\u001b[0m, in \u001b[0;36mPoolManager.urlopen\u001b[0;34m(self, method, url, redirect, **kw)\u001b[0m\n\u001b[1;32m 441\u001b[0m response \u001b[39m=\u001b[39m conn\u001b[39m.\u001b[39murlopen(method, url, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkw)\n\u001b[1;32m 442\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[0;32m--> 443\u001b[0m response \u001b[39m=\u001b[39m conn\u001b[39m.\u001b[39;49murlopen(method, u\u001b[39m.\u001b[39;49mrequest_uri, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkw)\n\u001b[1;32m 445\u001b[0m redirect_location \u001b[39m=\u001b[39m redirect \u001b[39mand\u001b[39;00m response\u001b[39m.\u001b[39mget_redirect_location()\n\u001b[1;32m 446\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mnot\u001b[39;00m redirect_location:\n", + "File \u001b[0;32m/workspaces/sage-monorepo/apps/openchallenges/notebook/.venv/lib/python3.10/site-packages/urllib3/connectionpool.py:875\u001b[0m, in \u001b[0;36mHTTPConnectionPool.urlopen\u001b[0;34m(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, preload_content, decode_content, **response_kw)\u001b[0m\n\u001b[1;32m 870\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mnot\u001b[39;00m conn:\n\u001b[1;32m 871\u001b[0m \u001b[39m# Try again\u001b[39;00m\n\u001b[1;32m 872\u001b[0m log\u001b[39m.\u001b[39mwarning(\n\u001b[1;32m 873\u001b[0m \u001b[39m\"\u001b[39m\u001b[39mRetrying (\u001b[39m\u001b[39m%r\u001b[39;00m\u001b[39m) after connection broken by \u001b[39m\u001b[39m'\u001b[39m\u001b[39m%r\u001b[39;00m\u001b[39m'\u001b[39m\u001b[39m: \u001b[39m\u001b[39m%s\u001b[39;00m\u001b[39m\"\u001b[39m, retries, err, url\n\u001b[1;32m 874\u001b[0m )\n\u001b[0;32m--> 875\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49murlopen(\n\u001b[1;32m 876\u001b[0m method,\n\u001b[1;32m 877\u001b[0m url,\n\u001b[1;32m 878\u001b[0m body,\n\u001b[1;32m 879\u001b[0m headers,\n\u001b[1;32m 880\u001b[0m retries,\n\u001b[1;32m 881\u001b[0m redirect,\n\u001b[1;32m 882\u001b[0m assert_same_host,\n\u001b[1;32m 883\u001b[0m timeout\u001b[39m=\u001b[39;49mtimeout,\n\u001b[1;32m 884\u001b[0m pool_timeout\u001b[39m=\u001b[39;49mpool_timeout,\n\u001b[1;32m 885\u001b[0m release_conn\u001b[39m=\u001b[39;49mrelease_conn,\n\u001b[1;32m 886\u001b[0m chunked\u001b[39m=\u001b[39;49mchunked,\n\u001b[1;32m 887\u001b[0m body_pos\u001b[39m=\u001b[39;49mbody_pos,\n\u001b[1;32m 888\u001b[0m preload_content\u001b[39m=\u001b[39;49mpreload_content,\n\u001b[1;32m 889\u001b[0m decode_content\u001b[39m=\u001b[39;49mdecode_content,\n\u001b[1;32m 890\u001b[0m \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mresponse_kw,\n\u001b[1;32m 891\u001b[0m )\n\u001b[1;32m 893\u001b[0m \u001b[39m# Handle redirect?\u001b[39;00m\n\u001b[1;32m 894\u001b[0m redirect_location \u001b[39m=\u001b[39m redirect \u001b[39mand\u001b[39;00m response\u001b[39m.\u001b[39mget_redirect_location()\n", + "File \u001b[0;32m/workspaces/sage-monorepo/apps/openchallenges/notebook/.venv/lib/python3.10/site-packages/urllib3/connectionpool.py:875\u001b[0m, in \u001b[0;36mHTTPConnectionPool.urlopen\u001b[0;34m(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, preload_content, decode_content, **response_kw)\u001b[0m\n\u001b[1;32m 870\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mnot\u001b[39;00m conn:\n\u001b[1;32m 871\u001b[0m \u001b[39m# Try again\u001b[39;00m\n\u001b[1;32m 872\u001b[0m log\u001b[39m.\u001b[39mwarning(\n\u001b[1;32m 873\u001b[0m \u001b[39m\"\u001b[39m\u001b[39mRetrying (\u001b[39m\u001b[39m%r\u001b[39;00m\u001b[39m) after connection broken by \u001b[39m\u001b[39m'\u001b[39m\u001b[39m%r\u001b[39;00m\u001b[39m'\u001b[39m\u001b[39m: \u001b[39m\u001b[39m%s\u001b[39;00m\u001b[39m\"\u001b[39m, retries, err, url\n\u001b[1;32m 874\u001b[0m )\n\u001b[0;32m--> 875\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49murlopen(\n\u001b[1;32m 876\u001b[0m method,\n\u001b[1;32m 877\u001b[0m url,\n\u001b[1;32m 878\u001b[0m body,\n\u001b[1;32m 879\u001b[0m headers,\n\u001b[1;32m 880\u001b[0m retries,\n\u001b[1;32m 881\u001b[0m redirect,\n\u001b[1;32m 882\u001b[0m assert_same_host,\n\u001b[1;32m 883\u001b[0m timeout\u001b[39m=\u001b[39;49mtimeout,\n\u001b[1;32m 884\u001b[0m pool_timeout\u001b[39m=\u001b[39;49mpool_timeout,\n\u001b[1;32m 885\u001b[0m release_conn\u001b[39m=\u001b[39;49mrelease_conn,\n\u001b[1;32m 886\u001b[0m chunked\u001b[39m=\u001b[39;49mchunked,\n\u001b[1;32m 887\u001b[0m body_pos\u001b[39m=\u001b[39;49mbody_pos,\n\u001b[1;32m 888\u001b[0m preload_content\u001b[39m=\u001b[39;49mpreload_content,\n\u001b[1;32m 889\u001b[0m decode_content\u001b[39m=\u001b[39;49mdecode_content,\n\u001b[1;32m 890\u001b[0m \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mresponse_kw,\n\u001b[1;32m 891\u001b[0m )\n\u001b[1;32m 893\u001b[0m \u001b[39m# Handle redirect?\u001b[39;00m\n\u001b[1;32m 894\u001b[0m redirect_location \u001b[39m=\u001b[39m redirect \u001b[39mand\u001b[39;00m response\u001b[39m.\u001b[39mget_redirect_location()\n", + "File \u001b[0;32m/workspaces/sage-monorepo/apps/openchallenges/notebook/.venv/lib/python3.10/site-packages/urllib3/connectionpool.py:875\u001b[0m, in \u001b[0;36mHTTPConnectionPool.urlopen\u001b[0;34m(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, preload_content, decode_content, **response_kw)\u001b[0m\n\u001b[1;32m 870\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mnot\u001b[39;00m conn:\n\u001b[1;32m 871\u001b[0m \u001b[39m# Try again\u001b[39;00m\n\u001b[1;32m 872\u001b[0m log\u001b[39m.\u001b[39mwarning(\n\u001b[1;32m 873\u001b[0m \u001b[39m\"\u001b[39m\u001b[39mRetrying (\u001b[39m\u001b[39m%r\u001b[39;00m\u001b[39m) after connection broken by \u001b[39m\u001b[39m'\u001b[39m\u001b[39m%r\u001b[39;00m\u001b[39m'\u001b[39m\u001b[39m: \u001b[39m\u001b[39m%s\u001b[39;00m\u001b[39m\"\u001b[39m, retries, err, url\n\u001b[1;32m 874\u001b[0m )\n\u001b[0;32m--> 875\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49murlopen(\n\u001b[1;32m 876\u001b[0m method,\n\u001b[1;32m 877\u001b[0m url,\n\u001b[1;32m 878\u001b[0m body,\n\u001b[1;32m 879\u001b[0m headers,\n\u001b[1;32m 880\u001b[0m retries,\n\u001b[1;32m 881\u001b[0m redirect,\n\u001b[1;32m 882\u001b[0m assert_same_host,\n\u001b[1;32m 883\u001b[0m timeout\u001b[39m=\u001b[39;49mtimeout,\n\u001b[1;32m 884\u001b[0m pool_timeout\u001b[39m=\u001b[39;49mpool_timeout,\n\u001b[1;32m 885\u001b[0m release_conn\u001b[39m=\u001b[39;49mrelease_conn,\n\u001b[1;32m 886\u001b[0m chunked\u001b[39m=\u001b[39;49mchunked,\n\u001b[1;32m 887\u001b[0m body_pos\u001b[39m=\u001b[39;49mbody_pos,\n\u001b[1;32m 888\u001b[0m preload_content\u001b[39m=\u001b[39;49mpreload_content,\n\u001b[1;32m 889\u001b[0m decode_content\u001b[39m=\u001b[39;49mdecode_content,\n\u001b[1;32m 890\u001b[0m \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mresponse_kw,\n\u001b[1;32m 891\u001b[0m )\n\u001b[1;32m 893\u001b[0m \u001b[39m# Handle redirect?\u001b[39;00m\n\u001b[1;32m 894\u001b[0m redirect_location \u001b[39m=\u001b[39m redirect \u001b[39mand\u001b[39;00m response\u001b[39m.\u001b[39mget_redirect_location()\n", + "File \u001b[0;32m/workspaces/sage-monorepo/apps/openchallenges/notebook/.venv/lib/python3.10/site-packages/urllib3/connectionpool.py:845\u001b[0m, in \u001b[0;36mHTTPConnectionPool.urlopen\u001b[0;34m(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, preload_content, decode_content, **response_kw)\u001b[0m\n\u001b[1;32m 842\u001b[0m \u001b[39melif\u001b[39;00m \u001b[39misinstance\u001b[39m(new_e, (\u001b[39mOSError\u001b[39;00m, HTTPException)):\n\u001b[1;32m 843\u001b[0m new_e \u001b[39m=\u001b[39m ProtocolError(\u001b[39m\"\u001b[39m\u001b[39mConnection aborted.\u001b[39m\u001b[39m\"\u001b[39m, new_e)\n\u001b[0;32m--> 845\u001b[0m retries \u001b[39m=\u001b[39m retries\u001b[39m.\u001b[39;49mincrement(\n\u001b[1;32m 846\u001b[0m method, url, error\u001b[39m=\u001b[39;49mnew_e, _pool\u001b[39m=\u001b[39;49m\u001b[39mself\u001b[39;49m, _stacktrace\u001b[39m=\u001b[39;49msys\u001b[39m.\u001b[39;49mexc_info()[\u001b[39m2\u001b[39;49m]\n\u001b[1;32m 847\u001b[0m )\n\u001b[1;32m 848\u001b[0m retries\u001b[39m.\u001b[39msleep()\n\u001b[1;32m 850\u001b[0m \u001b[39m# Keep track of the error for the retry warning.\u001b[39;00m\n", + "File \u001b[0;32m/workspaces/sage-monorepo/apps/openchallenges/notebook/.venv/lib/python3.10/site-packages/urllib3/util/retry.py:515\u001b[0m, in \u001b[0;36mRetry.increment\u001b[0;34m(self, method, url, response, error, _pool, _stacktrace)\u001b[0m\n\u001b[1;32m 513\u001b[0m \u001b[39mif\u001b[39;00m new_retry\u001b[39m.\u001b[39mis_exhausted():\n\u001b[1;32m 514\u001b[0m reason \u001b[39m=\u001b[39m error \u001b[39mor\u001b[39;00m ResponseError(cause)\n\u001b[0;32m--> 515\u001b[0m \u001b[39mraise\u001b[39;00m MaxRetryError(_pool, url, reason) \u001b[39mfrom\u001b[39;00m \u001b[39mreason\u001b[39;00m \u001b[39m# type: ignore[arg-type]\u001b[39;00m\n\u001b[1;32m 517\u001b[0m log\u001b[39m.\u001b[39mdebug(\u001b[39m\"\u001b[39m\u001b[39mIncremented Retry for (url=\u001b[39m\u001b[39m'\u001b[39m\u001b[39m%s\u001b[39;00m\u001b[39m'\u001b[39m\u001b[39m): \u001b[39m\u001b[39m%r\u001b[39;00m\u001b[39m\"\u001b[39m, url, new_retry)\n\u001b[1;32m 519\u001b[0m \u001b[39mreturn\u001b[39;00m new_retry\n", + "\u001b[0;31mMaxRetryError\u001b[0m: HTTPConnectionPool(host='localhost', port=8000): Max retries exceeded with url: /api/v1/challenges?challengeSearchQuery=%7B%22pageNumber%22%3A%201%2C%20%22pageSize%22%3A%201%7D (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused'))" + ] + } + ], + "source": [ + "# Enter a context with an instance of the API client\n", + "with openchallenges_client.ApiClient(configuration) as api_client:\n", + " api_instance = challenge_api.ChallengeApi(api_client)\n", + " \n", + " query = openchallenges_client.ChallengeSearchQuery(page_number=1, page_size=1)\n", + "\n", + " try:\n", + " # Get the first page of the list of challenges\n", + " api_response = api_instance.list_challenges(query)\n", + " pprint(api_response)\n", + " except openchallenges_client.ApiException as e:\n", + " print(\"Exception when calling ChallengeApi->list_challenges: %s\\n\" % e)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d0c0b308-0b58-44a7-8ff6-4987dfbccb17", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/apps/openchallenges/notebook/poetry.lock b/apps/openchallenges/notebook/poetry.lock index 149f8c7f56..84ff397b55 100644 --- a/apps/openchallenges/notebook/poetry.lock +++ b/apps/openchallenges/notebook/poetry.lock @@ -1,31 +1,164 @@ -# This file is automatically @generated by Poetry and should not be changed by hand. +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. + +[[package]] +name = "aenum" +version = "3.1.15" +description = "Advanced Enumerations (compatible with Python's stdlib Enum), NamedTuples, and NamedConstants" +optional = false +python-versions = "*" +files = [ + {file = "aenum-3.1.15-py2-none-any.whl", hash = "sha256:27b1710b9d084de6e2e695dab78fe9f269de924b51ae2850170ee7e1ca6288a5"}, + {file = "aenum-3.1.15-py3-none-any.whl", hash = "sha256:e0dfaeea4c2bd362144b87377e2c61d91958c5ed0b4daf89cb6f45ae23af6288"}, + {file = "aenum-3.1.15.tar.gz", hash = "sha256:8cbd76cd18c4f870ff39b24284d3ea028fbe8731a58df3aa581e434c575b9559"}, +] + +[[package]] +name = "aiohttp" +version = "3.8.6" +description = "Async http client/server framework (asyncio)" +optional = false +python-versions = ">=3.6" +files = [ + {file = "aiohttp-3.8.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:41d55fc043954cddbbd82503d9cc3f4814a40bcef30b3569bc7b5e34130718c1"}, + {file = "aiohttp-3.8.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1d84166673694841d8953f0a8d0c90e1087739d24632fe86b1a08819168b4566"}, + {file = "aiohttp-3.8.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:253bf92b744b3170eb4c4ca2fa58f9c4b87aeb1df42f71d4e78815e6e8b73c9e"}, + {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3fd194939b1f764d6bb05490987bfe104287bbf51b8d862261ccf66f48fb4096"}, + {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6c5f938d199a6fdbdc10bbb9447496561c3a9a565b43be564648d81e1102ac22"}, + {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2817b2f66ca82ee699acd90e05c95e79bbf1dc986abb62b61ec8aaf851e81c93"}, + {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fa375b3d34e71ccccf172cab401cd94a72de7a8cc01847a7b3386204093bb47"}, + {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9de50a199b7710fa2904be5a4a9b51af587ab24c8e540a7243ab737b45844543"}, + {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e1d8cb0b56b3587c5c01de3bf2f600f186da7e7b5f7353d1bf26a8ddca57f965"}, + {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8e31e9db1bee8b4f407b77fd2507337a0a80665ad7b6c749d08df595d88f1cf5"}, + {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:7bc88fc494b1f0311d67f29fee6fd636606f4697e8cc793a2d912ac5b19aa38d"}, + {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ec00c3305788e04bf6d29d42e504560e159ccaf0be30c09203b468a6c1ccd3b2"}, + {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ad1407db8f2f49329729564f71685557157bfa42b48f4b93e53721a16eb813ed"}, + {file = "aiohttp-3.8.6-cp310-cp310-win32.whl", hash = "sha256:ccc360e87341ad47c777f5723f68adbb52b37ab450c8bc3ca9ca1f3e849e5fe2"}, + {file = "aiohttp-3.8.6-cp310-cp310-win_amd64.whl", hash = "sha256:93c15c8e48e5e7b89d5cb4613479d144fda8344e2d886cf694fd36db4cc86865"}, + {file = "aiohttp-3.8.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6e2f9cc8e5328f829f6e1fb74a0a3a939b14e67e80832975e01929e320386b34"}, + {file = "aiohttp-3.8.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e6a00ffcc173e765e200ceefb06399ba09c06db97f401f920513a10c803604ca"}, + {file = "aiohttp-3.8.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:41bdc2ba359032e36c0e9de5a3bd00d6fb7ea558a6ce6b70acedf0da86458321"}, + {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14cd52ccf40006c7a6cd34a0f8663734e5363fd981807173faf3a017e202fec9"}, + {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2d5b785c792802e7b275c420d84f3397668e9d49ab1cb52bd916b3b3ffcf09ad"}, + {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1bed815f3dc3d915c5c1e556c397c8667826fbc1b935d95b0ad680787896a358"}, + {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96603a562b546632441926cd1293cfcb5b69f0b4159e6077f7c7dbdfb686af4d"}, + {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d76e8b13161a202d14c9584590c4df4d068c9567c99506497bdd67eaedf36403"}, + {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e3f1e3f1a1751bb62b4a1b7f4e435afcdade6c17a4fd9b9d43607cebd242924a"}, + {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:76b36b3124f0223903609944a3c8bf28a599b2cc0ce0be60b45211c8e9be97f8"}, + {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:a2ece4af1f3c967a4390c284797ab595a9f1bc1130ef8b01828915a05a6ae684"}, + {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:16d330b3b9db87c3883e565340d292638a878236418b23cc8b9b11a054aaa887"}, + {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:42c89579f82e49db436b69c938ab3e1559e5a4409eb8639eb4143989bc390f2f"}, + {file = "aiohttp-3.8.6-cp311-cp311-win32.whl", hash = "sha256:efd2fcf7e7b9d7ab16e6b7d54205beded0a9c8566cb30f09c1abe42b4e22bdcb"}, + {file = "aiohttp-3.8.6-cp311-cp311-win_amd64.whl", hash = "sha256:3b2ab182fc28e7a81f6c70bfbd829045d9480063f5ab06f6e601a3eddbbd49a0"}, + {file = "aiohttp-3.8.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:fdee8405931b0615220e5ddf8cd7edd8592c606a8e4ca2a00704883c396e4479"}, + {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d25036d161c4fe2225d1abff2bd52c34ed0b1099f02c208cd34d8c05729882f0"}, + {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d791245a894be071d5ab04bbb4850534261a7d4fd363b094a7b9963e8cdbd31"}, + {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0cccd1de239afa866e4ce5c789b3032442f19c261c7d8a01183fd956b1935349"}, + {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f13f60d78224f0dace220d8ab4ef1dbc37115eeeab8c06804fec11bec2bbd07"}, + {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a9b5a0606faca4f6cc0d338359d6fa137104c337f489cd135bb7fbdbccb1e39"}, + {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:13da35c9ceb847732bf5c6c5781dcf4780e14392e5d3b3c689f6d22f8e15ae31"}, + {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:4d4cbe4ffa9d05f46a28252efc5941e0462792930caa370a6efaf491f412bc66"}, + {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:229852e147f44da0241954fc6cb910ba074e597f06789c867cb7fb0621e0ba7a"}, + {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:713103a8bdde61d13490adf47171a1039fd880113981e55401a0f7b42c37d071"}, + {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:45ad816b2c8e3b60b510f30dbd37fe74fd4a772248a52bb021f6fd65dff809b6"}, + {file = "aiohttp-3.8.6-cp36-cp36m-win32.whl", hash = "sha256:2b8d4e166e600dcfbff51919c7a3789ff6ca8b3ecce16e1d9c96d95dd569eb4c"}, + {file = "aiohttp-3.8.6-cp36-cp36m-win_amd64.whl", hash = "sha256:0912ed87fee967940aacc5306d3aa8ba3a459fcd12add0b407081fbefc931e53"}, + {file = "aiohttp-3.8.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e2a988a0c673c2e12084f5e6ba3392d76c75ddb8ebc6c7e9ead68248101cd446"}, + {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebf3fd9f141700b510d4b190094db0ce37ac6361a6806c153c161dc6c041ccda"}, + {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3161ce82ab85acd267c8f4b14aa226047a6bee1e4e6adb74b798bd42c6ae1f80"}, + {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d95fc1bf33a9a81469aa760617b5971331cdd74370d1214f0b3109272c0e1e3c"}, + {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c43ecfef7deaf0617cee936836518e7424ee12cb709883f2c9a1adda63cc460"}, + {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca80e1b90a05a4f476547f904992ae81eda5c2c85c66ee4195bb8f9c5fb47f28"}, + {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:90c72ebb7cb3a08a7f40061079817133f502a160561d0675b0a6adf231382c92"}, + {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bb54c54510e47a8c7c8e63454a6acc817519337b2b78606c4e840871a3e15349"}, + {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:de6a1c9f6803b90e20869e6b99c2c18cef5cc691363954c93cb9adeb26d9f3ae"}, + {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:a3628b6c7b880b181a3ae0a0683698513874df63783fd89de99b7b7539e3e8a8"}, + {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:fc37e9aef10a696a5a4474802930079ccfc14d9f9c10b4662169671ff034b7df"}, + {file = "aiohttp-3.8.6-cp37-cp37m-win32.whl", hash = "sha256:f8ef51e459eb2ad8e7a66c1d6440c808485840ad55ecc3cafefadea47d1b1ba2"}, + {file = "aiohttp-3.8.6-cp37-cp37m-win_amd64.whl", hash = "sha256:b2fe42e523be344124c6c8ef32a011444e869dc5f883c591ed87f84339de5976"}, + {file = "aiohttp-3.8.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:9e2ee0ac5a1f5c7dd3197de309adfb99ac4617ff02b0603fd1e65b07dc772e4b"}, + {file = "aiohttp-3.8.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:01770d8c04bd8db568abb636c1fdd4f7140b284b8b3e0b4584f070180c1e5c62"}, + {file = "aiohttp-3.8.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3c68330a59506254b556b99a91857428cab98b2f84061260a67865f7f52899f5"}, + {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89341b2c19fb5eac30c341133ae2cc3544d40d9b1892749cdd25892bbc6ac951"}, + {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71783b0b6455ac8f34b5ec99d83e686892c50498d5d00b8e56d47f41b38fbe04"}, + {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f628dbf3c91e12f4d6c8b3f092069567d8eb17814aebba3d7d60c149391aee3a"}, + {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b04691bc6601ef47c88f0255043df6f570ada1a9ebef99c34bd0b72866c217ae"}, + {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ee912f7e78287516df155f69da575a0ba33b02dd7c1d6614dbc9463f43066e3"}, + {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9c19b26acdd08dd239e0d3669a3dddafd600902e37881f13fbd8a53943079dbc"}, + {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:99c5ac4ad492b4a19fc132306cd57075c28446ec2ed970973bbf036bcda1bcc6"}, + {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:f0f03211fd14a6a0aed2997d4b1c013d49fb7b50eeb9ffdf5e51f23cfe2c77fa"}, + {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:8d399dade330c53b4106160f75f55407e9ae7505263ea86f2ccca6bfcbdb4921"}, + {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ec4fd86658c6a8964d75426517dc01cbf840bbf32d055ce64a9e63a40fd7b771"}, + {file = "aiohttp-3.8.6-cp38-cp38-win32.whl", hash = "sha256:33164093be11fcef3ce2571a0dccd9041c9a93fa3bde86569d7b03120d276c6f"}, + {file = "aiohttp-3.8.6-cp38-cp38-win_amd64.whl", hash = "sha256:bdf70bfe5a1414ba9afb9d49f0c912dc524cf60141102f3a11143ba3d291870f"}, + {file = "aiohttp-3.8.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d52d5dc7c6682b720280f9d9db41d36ebe4791622c842e258c9206232251ab2b"}, + {file = "aiohttp-3.8.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4ac39027011414dbd3d87f7edb31680e1f430834c8cef029f11c66dad0670aa5"}, + {file = "aiohttp-3.8.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3f5c7ce535a1d2429a634310e308fb7d718905487257060e5d4598e29dc17f0b"}, + {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b30e963f9e0d52c28f284d554a9469af073030030cef8693106d918b2ca92f54"}, + {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:918810ef188f84152af6b938254911055a72e0f935b5fbc4c1a4ed0b0584aed1"}, + {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:002f23e6ea8d3dd8d149e569fd580c999232b5fbc601c48d55398fbc2e582e8c"}, + {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4fcf3eabd3fd1a5e6092d1242295fa37d0354b2eb2077e6eb670accad78e40e1"}, + {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:255ba9d6d5ff1a382bb9a578cd563605aa69bec845680e21c44afc2670607a95"}, + {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d67f8baed00870aa390ea2590798766256f31dc5ed3ecc737debb6e97e2ede78"}, + {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:86f20cee0f0a317c76573b627b954c412ea766d6ada1a9fcf1b805763ae7feeb"}, + {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:39a312d0e991690ccc1a61f1e9e42daa519dcc34ad03eb6f826d94c1190190dd"}, + {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:e827d48cf802de06d9c935088c2924e3c7e7533377d66b6f31ed175c1620e05e"}, + {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bd111d7fc5591ddf377a408ed9067045259ff2770f37e2d94e6478d0f3fc0c17"}, + {file = "aiohttp-3.8.6-cp39-cp39-win32.whl", hash = "sha256:caf486ac1e689dda3502567eb89ffe02876546599bbf915ec94b1fa424eeffd4"}, + {file = "aiohttp-3.8.6-cp39-cp39-win_amd64.whl", hash = "sha256:3f0e27e5b733803333bb2371249f41cf42bae8884863e8e8965ec69bebe53132"}, + {file = "aiohttp-3.8.6.tar.gz", hash = "sha256:b0cf2a4501bff9330a8a5248b4ce951851e415bdcce9dc158e76cfd55e15085c"}, +] + +[package.dependencies] +aiosignal = ">=1.1.2" +async-timeout = ">=4.0.0a3,<5.0" +attrs = ">=17.3.0" +charset-normalizer = ">=2.0,<4.0" +frozenlist = ">=1.1.1" +multidict = ">=4.5,<7.0" +yarl = ">=1.0,<2.0" + +[package.extras] +speedups = ["Brotli", "aiodns", "cchardet"] + +[[package]] +name = "aiosignal" +version = "1.3.1" +description = "aiosignal: a list of registered asynchronous callbacks" +optional = false +python-versions = ">=3.7" +files = [ + {file = "aiosignal-1.3.1-py3-none-any.whl", hash = "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17"}, + {file = "aiosignal-1.3.1.tar.gz", hash = "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc"}, +] + +[package.dependencies] +frozenlist = ">=1.1.0" [[package]] name = "anyio" -version = "3.6.2" +version = "4.0.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" -category = "dev" optional = false -python-versions = ">=3.6.2" +python-versions = ">=3.8" files = [ - {file = "anyio-3.6.2-py3-none-any.whl", hash = "sha256:fbbe32bd270d2a2ef3ed1c5d45041250284e31fc0a4df4a5a6071842051a51e3"}, - {file = "anyio-3.6.2.tar.gz", hash = "sha256:25ea0d673ae30af41a0c442f81cf3b38c7e79fdc7b60335a4c14e05eb0947421"}, + {file = "anyio-4.0.0-py3-none-any.whl", hash = "sha256:cfdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f"}, + {file = "anyio-4.0.0.tar.gz", hash = "sha256:f7ed51751b2c2add651e5747c891b47e26d2a21be5d32d9311dfe9692f3e5d7a"}, ] [package.dependencies] +exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} idna = ">=2.8" sniffio = ">=1.1" [package.extras] -doc = ["packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] -test = ["contextlib2", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (<0.15)", "uvloop (>=0.15)"] -trio = ["trio (>=0.16,<0.22)"] +doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] +trio = ["trio (>=0.22)"] [[package]] name = "appnope" version = "0.1.3" description = "Disable App Nap on macOS >= 10.9" -category = "dev" optional = false python-versions = "*" files = [ @@ -35,29 +168,28 @@ files = [ [[package]] name = "argon2-cffi" -version = "21.3.0" -description = "The secure Argon2 password hashing algorithm." -category = "dev" +version = "23.1.0" +description = "Argon2 for Python" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "argon2-cffi-21.3.0.tar.gz", hash = "sha256:d384164d944190a7dd7ef22c6aa3ff197da12962bd04b17f64d4e93d934dba5b"}, - {file = "argon2_cffi-21.3.0-py3-none-any.whl", hash = "sha256:8c976986f2c5c0e5000919e6de187906cfd81fb1c72bf9d88c01177e77da7f80"}, + {file = "argon2_cffi-23.1.0-py3-none-any.whl", hash = "sha256:c670642b78ba29641818ab2e68bd4e6a78ba53b7eff7b4c3815ae16abf91c7ea"}, + {file = "argon2_cffi-23.1.0.tar.gz", hash = "sha256:879c3e79a2729ce768ebb7d36d4609e3a78a4ca2ec3a9f12286ca057e3d0db08"}, ] [package.dependencies] argon2-cffi-bindings = "*" [package.extras] -dev = ["cogapp", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "pre-commit", "pytest", "sphinx", "sphinx-notfound-page", "tomli"] -docs = ["furo", "sphinx", "sphinx-notfound-page"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pytest"] +dev = ["argon2-cffi[tests,typing]", "tox (>4)"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-copybutton", "sphinx-notfound-page"] +tests = ["hypothesis", "pytest"] +typing = ["mypy"] [[package]] name = "argon2-cffi-bindings" version = "21.2.0" description = "Low-level CFFI bindings for Argon2" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -93,76 +225,87 @@ tests = ["pytest"] [[package]] name = "arrow" -version = "1.2.3" +version = "1.3.0" description = "Better dates & times for Python" -category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "arrow-1.2.3-py3-none-any.whl", hash = "sha256:5a49ab92e3b7b71d96cd6bfcc4df14efefc9dfa96ea19045815914a6ab6b1fe2"}, - {file = "arrow-1.2.3.tar.gz", hash = "sha256:3934b30ca1b9f292376d9db15b19446088d12ec58629bc3f0da28fd55fb633a1"}, + {file = "arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80"}, + {file = "arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85"}, ] [package.dependencies] python-dateutil = ">=2.7.0" +types-python-dateutil = ">=2.8.10" + +[package.extras] +doc = ["doc8", "sphinx (>=7.0.0)", "sphinx-autobuild", "sphinx-autodoc-typehints", "sphinx_rtd_theme (>=1.3.0)"] +test = ["dateparser (==1.*)", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "pytz (==2021.1)", "simplejson (==3.*)"] [[package]] name = "asttokens" -version = "2.2.1" +version = "2.4.0" description = "Annotate AST trees with source code positions" -category = "dev" optional = false python-versions = "*" files = [ - {file = "asttokens-2.2.1-py2.py3-none-any.whl", hash = "sha256:6b0ac9e93fb0335014d382b8fa9b3afa7df546984258005da0b9e7095b3deb1c"}, - {file = "asttokens-2.2.1.tar.gz", hash = "sha256:4622110b2a6f30b77e1473affaa97e711bc2f07d3f10848420ff1898edbe94f3"}, + {file = "asttokens-2.4.0-py2.py3-none-any.whl", hash = "sha256:cf8fc9e61a86461aa9fb161a14a0841a03c405fa829ac6b202670b3495d2ce69"}, + {file = "asttokens-2.4.0.tar.gz", hash = "sha256:2e0171b991b2c959acc6c49318049236844a5da1d65ba2672c4880c1c894834e"}, ] [package.dependencies] -six = "*" +six = ">=1.12.0" [package.extras] test = ["astroid", "pytest"] +[[package]] +name = "async-timeout" +version = "4.0.3" +description = "Timeout context manager for asyncio programs" +optional = false +python-versions = ">=3.7" +files = [ + {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"}, + {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"}, +] + [[package]] name = "attrs" -version = "22.2.0" +version = "23.1.0" description = "Classes Without Boilerplate" -category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "attrs-22.2.0-py3-none-any.whl", hash = "sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836"}, - {file = "attrs-22.2.0.tar.gz", hash = "sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99"}, + {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, + {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, ] [package.extras] -cov = ["attrs[tests]", "coverage-enable-subprocess", "coverage[toml] (>=5.3)"] -dev = ["attrs[docs,tests]"] -docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope.interface"] -tests = ["attrs[tests-no-zope]", "zope.interface"] -tests-no-zope = ["cloudpickle", "cloudpickle", "hypothesis", "hypothesis", "mypy (>=0.971,<0.990)", "mypy (>=0.971,<0.990)", "pympler", "pympler", "pytest (>=4.3.0)", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-mypy-plugins", "pytest-xdist[psutil]", "pytest-xdist[psutil]"] +cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] +dev = ["attrs[docs,tests]", "pre-commit"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] +tests = ["attrs[tests-no-zope]", "zope-interface"] +tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] [[package]] name = "babel" -version = "2.11.0" +version = "2.13.0" description = "Internationalization utilities" -category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "Babel-2.11.0-py3-none-any.whl", hash = "sha256:1ad3eca1c885218f6dce2ab67291178944f810a10a9b5f3cb8382a5a232b64fe"}, - {file = "Babel-2.11.0.tar.gz", hash = "sha256:5ef4b3226b0180dedded4229651c8b0e1a3a6a2837d45a073272f313e4cf97f6"}, + {file = "Babel-2.13.0-py3-none-any.whl", hash = "sha256:fbfcae1575ff78e26c7449136f1abbefc3c13ce542eeb13d43d50d8b047216ec"}, + {file = "Babel-2.13.0.tar.gz", hash = "sha256:04c3e2d28d2b7681644508f836be388ae49e0cfe91465095340395b60d00f210"}, ] -[package.dependencies] -pytz = ">=2015.7" +[package.extras] +dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] [[package]] name = "backcall" version = "0.2.0" description = "Specifications for callback functions passed in to an API" -category = "dev" optional = false python-versions = "*" files = [ @@ -172,14 +315,13 @@ files = [ [[package]] name = "beautifulsoup4" -version = "4.11.1" +version = "4.12.2" description = "Screen-scraping library" -category = "dev" optional = false python-versions = ">=3.6.0" files = [ - {file = "beautifulsoup4-4.11.1-py3-none-any.whl", hash = "sha256:58d5c3d29f5a36ffeb94f02f0d786cd53014cf9b3b3951d42e0080d8a9498d30"}, - {file = "beautifulsoup4-4.11.1.tar.gz", hash = "sha256:ad9aa55b65ef2808eb405f46cf74df7fcb7044d5cbc26487f96eb2ef2e436693"}, + {file = "beautifulsoup4-4.12.2-py3-none-any.whl", hash = "sha256:bd2520ca0d9d7d12694a53d44ac482d181b4ec1888909b035a3dbf40d0f57d4a"}, + {file = "beautifulsoup4-4.12.2.tar.gz", hash = "sha256:492bbc69dca35d12daac71c4db1bfff0c876c00ef4a2ffacce226d4638eb72da"}, ] [package.dependencies] @@ -191,14 +333,13 @@ lxml = ["lxml"] [[package]] name = "bleach" -version = "5.0.1" +version = "6.1.0" description = "An easy safelist-based HTML-sanitizing tool." -category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "bleach-5.0.1-py3-none-any.whl", hash = "sha256:085f7f33c15bd408dd9b17a4ad77c577db66d76203e5984b1bd59baeee948b2a"}, - {file = "bleach-5.0.1.tar.gz", hash = "sha256:0d03255c47eb9bd2f26aa9bb7f2107732e7e8fe195ca2f64709fcf3b0a4a085c"}, + {file = "bleach-6.1.0-py3-none-any.whl", hash = "sha256:3225f354cfc436b9789c66c4ee030194bee0568fbf9cbdad3bc8b5c26c5f12b6"}, + {file = "bleach-6.1.0.tar.gz", hash = "sha256:0a31f1837963c41d46bbf1331b8778e1308ea0791db03cc4e7357b97cf42a8fe"}, ] [package.dependencies] @@ -206,93 +347,78 @@ six = ">=1.9.0" webencodings = "*" [package.extras] -css = ["tinycss2 (>=1.1.0,<1.2)"] -dev = ["Sphinx (==4.3.2)", "black (==22.3.0)", "build (==0.8.0)", "flake8 (==4.0.1)", "hashin (==0.17.0)", "mypy (==0.961)", "pip-tools (==6.6.2)", "pytest (==7.1.2)", "tox (==3.25.0)", "twine (==4.0.1)", "wheel (==0.37.1)"] +css = ["tinycss2 (>=1.1.0,<1.3)"] [[package]] name = "certifi" -version = "2022.12.7" +version = "2023.7.22" description = "Python package for providing Mozilla's CA Bundle." -category = "main" optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"}, - {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"}, + {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, + {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, ] [[package]] name = "cffi" -version = "1.15.1" +version = "1.16.0" description = "Foreign Function Interface for Python calling C code." -category = "dev" optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, - {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, - {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, - {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, - {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, - {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, - {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, - {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, - {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, - {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, - {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, - {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, - {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, - {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, - {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, - {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, - {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, - {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, - {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, + {file = "cffi-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088"}, + {file = "cffi-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614"}, + {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743"}, + {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d"}, + {file = "cffi-1.16.0-cp310-cp310-win32.whl", hash = "sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a"}, + {file = "cffi-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1"}, + {file = "cffi-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404"}, + {file = "cffi-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e"}, + {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc"}, + {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb"}, + {file = "cffi-1.16.0-cp311-cp311-win32.whl", hash = "sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab"}, + {file = "cffi-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba"}, + {file = "cffi-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956"}, + {file = "cffi-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969"}, + {file = "cffi-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520"}, + {file = "cffi-1.16.0-cp312-cp312-win32.whl", hash = "sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b"}, + {file = "cffi-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235"}, + {file = "cffi-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324"}, + {file = "cffi-1.16.0-cp38-cp38-win32.whl", hash = "sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a"}, + {file = "cffi-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36"}, + {file = "cffi-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed"}, + {file = "cffi-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098"}, + {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000"}, + {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe"}, + {file = "cffi-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4"}, + {file = "cffi-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8"}, + {file = "cffi-1.16.0.tar.gz", hash = "sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0"}, ] [package.dependencies] @@ -300,107 +426,107 @@ pycparser = "*" [[package]] name = "charset-normalizer" -version = "3.0.1" +version = "3.3.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -category = "main" optional = false -python-versions = "*" +python-versions = ">=3.7.0" files = [ - {file = "charset-normalizer-3.0.1.tar.gz", hash = "sha256:ebea339af930f8ca5d7a699b921106c6e29c617fe9606fa7baa043c1cdae326f"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:88600c72ef7587fe1708fd242b385b6ed4b8904976d5da0893e31df8b3480cb6"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c75ffc45f25324e68ab238cb4b5c0a38cd1c3d7f1fb1f72b5541de469e2247db"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:db72b07027db150f468fbada4d85b3b2729a3db39178abf5c543b784c1254539"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62595ab75873d50d57323a91dd03e6966eb79c41fa834b7a1661ed043b2d404d"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ff6f3db31555657f3163b15a6b7c6938d08df7adbfc9dd13d9d19edad678f1e8"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:772b87914ff1152b92a197ef4ea40efe27a378606c39446ded52c8f80f79702e"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70990b9c51340e4044cfc394a81f614f3f90d41397104d226f21e66de668730d"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:292d5e8ba896bbfd6334b096e34bffb56161c81408d6d036a7dfa6929cff8783"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:2edb64ee7bf1ed524a1da60cdcd2e1f6e2b4f66ef7c077680739f1641f62f555"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:31a9ddf4718d10ae04d9b18801bd776693487cbb57d74cc3458a7673f6f34639"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:44ba614de5361b3e5278e1241fda3dc1838deed864b50a10d7ce92983797fa76"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:12db3b2c533c23ab812c2b25934f60383361f8a376ae272665f8e48b88e8e1c6"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c512accbd6ff0270939b9ac214b84fb5ada5f0409c44298361b2f5e13f9aed9e"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-win32.whl", hash = "sha256:502218f52498a36d6bf5ea77081844017bf7982cdbe521ad85e64cabee1b608b"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:601f36512f9e28f029d9481bdaf8e89e5148ac5d89cffd3b05cd533eeb423b59"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0298eafff88c99982a4cf66ba2efa1128e4ddaca0b05eec4c456bbc7db691d8d"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a8d0fc946c784ff7f7c3742310cc8a57c5c6dc31631269876a88b809dbeff3d3"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:87701167f2a5c930b403e9756fab1d31d4d4da52856143b609e30a1ce7160f3c"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14e76c0f23218b8f46c4d87018ca2e441535aed3632ca134b10239dfb6dadd6b"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0c0a590235ccd933d9892c627dec5bc7511ce6ad6c1011fdf5b11363022746c1"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c7fe7afa480e3e82eed58e0ca89f751cd14d767638e2550c77a92a9e749c317"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79909e27e8e4fcc9db4addea88aa63f6423ebb171db091fb4373e3312cb6d603"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ac7b6a045b814cf0c47f3623d21ebd88b3e8cf216a14790b455ea7ff0135d18"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:72966d1b297c741541ca8cf1223ff262a6febe52481af742036a0b296e35fa5a"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:f9d0c5c045a3ca9bedfc35dca8526798eb91a07aa7a2c0fee134c6c6f321cbd7"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:5995f0164fa7df59db4746112fec3f49c461dd6b31b841873443bdb077c13cfc"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4a8fcf28c05c1f6d7e177a9a46a1c52798bfe2ad80681d275b10dcf317deaf0b"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:761e8904c07ad053d285670f36dd94e1b6ab7f16ce62b9805c475b7aa1cffde6"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-win32.whl", hash = "sha256:71140351489970dfe5e60fc621ada3e0f41104a5eddaca47a7acb3c1b851d6d3"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:9ab77acb98eba3fd2a85cd160851816bfce6871d944d885febf012713f06659c"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:84c3990934bae40ea69a82034912ffe5a62c60bbf6ec5bc9691419641d7d5c9a"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74292fc76c905c0ef095fe11e188a32ebd03bc38f3f3e9bcb85e4e6db177b7ea"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c95a03c79bbe30eec3ec2b7f076074f4281526724c8685a42872974ef4d36b72"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4c39b0e3eac288fedc2b43055cfc2ca7a60362d0e5e87a637beac5d801ef478"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df2c707231459e8a4028eabcd3cfc827befd635b3ef72eada84ab13b52e1574d"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93ad6d87ac18e2a90b0fe89df7c65263b9a99a0eb98f0a3d2e079f12a0735837"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:59e5686dd847347e55dffcc191a96622f016bc0ad89105e24c14e0d6305acbc6"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:cd6056167405314a4dc3c173943f11249fa0f1b204f8b51ed4bde1a9cd1834dc"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:083c8d17153ecb403e5e1eb76a7ef4babfc2c48d58899c98fcaa04833e7a2f9a"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:f5057856d21e7586765171eac8b9fc3f7d44ef39425f85dbcccb13b3ebea806c"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:7eb33a30d75562222b64f569c642ff3dc6689e09adda43a082208397f016c39a"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-win32.whl", hash = "sha256:95dea361dd73757c6f1c0a1480ac499952c16ac83f7f5f4f84f0658a01b8ef41"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:eaa379fcd227ca235d04152ca6704c7cb55564116f8bc52545ff357628e10602"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3e45867f1f2ab0711d60c6c71746ac53537f1684baa699f4f668d4c6f6ce8e14"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cadaeaba78750d58d3cc6ac4d1fd867da6fc73c88156b7a3212a3cd4819d679d"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:911d8a40b2bef5b8bbae2e36a0b103f142ac53557ab421dc16ac4aafee6f53dc"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:503e65837c71b875ecdd733877d852adbc465bd82c768a067badd953bf1bc5a3"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a60332922359f920193b1d4826953c507a877b523b2395ad7bc716ddd386d866"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:16a8663d6e281208d78806dbe14ee9903715361cf81f6d4309944e4d1e59ac5b"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:a16418ecf1329f71df119e8a65f3aa68004a3f9383821edcb20f0702934d8087"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:9d9153257a3f70d5f69edf2325357251ed20f772b12e593f3b3377b5f78e7ef8"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:02a51034802cbf38db3f89c66fb5d2ec57e6fe7ef2f4a44d070a593c3688667b"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:2e396d70bc4ef5325b72b593a72c8979999aa52fb8bcf03f701c1b03e1166918"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:11b53acf2411c3b09e6af37e4b9005cba376c872503c8f28218c7243582df45d"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-win32.whl", hash = "sha256:0bf2dae5291758b6f84cf923bfaa285632816007db0330002fa1de38bfcb7154"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:2c03cc56021a4bd59be889c2b9257dae13bf55041a3372d3295416f86b295fb5"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:024e606be3ed92216e2b6952ed859d86b4cfa52cd5bc5f050e7dc28f9b43ec42"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4b0d02d7102dd0f997580b51edc4cebcf2ab6397a7edf89f1c73b586c614272c"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:358a7c4cb8ba9b46c453b1dd8d9e431452d5249072e4f56cfda3149f6ab1405e"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81d6741ab457d14fdedc215516665050f3822d3e56508921cc7239f8c8e66a58"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8b8af03d2e37866d023ad0ddea594edefc31e827fee64f8de5611a1dbc373174"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9cf4e8ad252f7c38dd1f676b46514f92dc0ebeb0db5552f5f403509705e24753"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e696f0dd336161fca9adbb846875d40752e6eba585843c768935ba5c9960722b"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c22d3fe05ce11d3671297dc8973267daa0f938b93ec716e12e0f6dee81591dc1"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:109487860ef6a328f3eec66f2bf78b0b72400280d8f8ea05f69c51644ba6521a"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:37f8febc8ec50c14f3ec9637505f28e58d4f66752207ea177c1d67df25da5aed"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:f97e83fa6c25693c7a35de154681fcc257c1c41b38beb0304b9c4d2d9e164479"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a152f5f33d64a6be73f1d30c9cc82dfc73cec6477ec268e7c6e4c7d23c2d2291"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:39049da0ffb96c8cbb65cbf5c5f3ca3168990adf3551bd1dee10c48fce8ae820"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-win32.whl", hash = "sha256:4457ea6774b5611f4bed5eaa5df55f70abde42364d498c5134b7ef4c6958e20e"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:e62164b50f84e20601c1ff8eb55620d2ad25fb81b59e3cd776a1902527a788af"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8eade758719add78ec36dc13201483f8e9b5d940329285edcd5f70c0a9edbd7f"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8499ca8f4502af841f68135133d8258f7b32a53a1d594aa98cc52013fff55678"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3fc1c4a2ffd64890aebdb3f97e1278b0cc72579a08ca4de8cd2c04799a3a22be"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00d3ffdaafe92a5dc603cb9bd5111aaa36dfa187c8285c543be562e61b755f6b"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c2ac1b08635a8cd4e0cbeaf6f5e922085908d48eb05d44c5ae9eabab148512ca"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f6f45710b4459401609ebebdbcfb34515da4fc2aa886f95107f556ac69a9147e"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ae1de54a77dc0d6d5fcf623290af4266412a7c4be0b1ff7444394f03f5c54e3"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3b590df687e3c5ee0deef9fc8c547d81986d9a1b56073d82de008744452d6541"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab5de034a886f616a5668aa5d098af2b5385ed70142090e2a31bcbd0af0fdb3d"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9cb3032517f1627cc012dbc80a8ec976ae76d93ea2b5feaa9d2a5b8882597579"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:608862a7bf6957f2333fc54ab4399e405baad0163dc9f8d99cb236816db169d4"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0f438ae3532723fb6ead77e7c604be7c8374094ef4ee2c5e03a3a17f1fca256c"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:356541bf4381fa35856dafa6a965916e54bed415ad8a24ee6de6e37deccf2786"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-win32.whl", hash = "sha256:39cf9ed17fe3b1bc81f33c9ceb6ce67683ee7526e65fde1447c772afc54a1bb8"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:0a11e971ed097d24c534c037d298ad32c6ce81a45736d31e0ff0ad37ab437d59"}, - {file = "charset_normalizer-3.0.1-py3-none-any.whl", hash = "sha256:7e189e2e1d3ed2f4aebabd2d5b0f931e883676e51c7624826e0a4e5fe8a0bf24"}, + {file = "charset-normalizer-3.3.0.tar.gz", hash = "sha256:63563193aec44bce707e0c5ca64ff69fa72ed7cf34ce6e11d5127555756fd2f6"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:effe5406c9bd748a871dbcaf3ac69167c38d72db8c9baf3ff954c344f31c4cbe"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4162918ef3098851fcd8a628bf9b6a98d10c380725df9e04caf5ca6dd48c847a"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0570d21da019941634a531444364f2482e8db0b3425fcd5ac0c36565a64142c8"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5707a746c6083a3a74b46b3a631d78d129edab06195a92a8ece755aac25a3f3d"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:278c296c6f96fa686d74eb449ea1697f3c03dc28b75f873b65b5201806346a69"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a4b71f4d1765639372a3b32d2638197f5cd5221b19531f9245fcc9ee62d38f56"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5969baeaea61c97efa706b9b107dcba02784b1601c74ac84f2a532ea079403e"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3f93dab657839dfa61025056606600a11d0b696d79386f974e459a3fbc568ec"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:db756e48f9c5c607b5e33dd36b1d5872d0422e960145b08ab0ec7fd420e9d649"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:232ac332403e37e4a03d209a3f92ed9071f7d3dbda70e2a5e9cff1c4ba9f0678"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e5c1502d4ace69a179305abb3f0bb6141cbe4714bc9b31d427329a95acfc8bdd"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:2502dd2a736c879c0f0d3e2161e74d9907231e25d35794584b1ca5284e43f596"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23e8565ab7ff33218530bc817922fae827420f143479b753104ab801145b1d5b"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-win32.whl", hash = "sha256:1872d01ac8c618a8da634e232f24793883d6e456a66593135aeafe3784b0848d"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:557b21a44ceac6c6b9773bc65aa1b4cc3e248a5ad2f5b914b91579a32e22204d"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d7eff0f27edc5afa9e405f7165f85a6d782d308f3b6b9d96016c010597958e63"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6a685067d05e46641d5d1623d7c7fdf15a357546cbb2f71b0ebde91b175ffc3e"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0d3d5b7db9ed8a2b11a774db2bbea7ba1884430a205dbd54a32d61d7c2a190fa"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2935ffc78db9645cb2086c2f8f4cfd23d9b73cc0dc80334bc30aac6f03f68f8c"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fe359b2e3a7729010060fbca442ca225280c16e923b37db0e955ac2a2b72a05"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:380c4bde80bce25c6e4f77b19386f5ec9db230df9f2f2ac1e5ad7af2caa70459"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0d1e3732768fecb052d90d62b220af62ead5748ac51ef61e7b32c266cac9293"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1b2919306936ac6efb3aed1fbf81039f7087ddadb3160882a57ee2ff74fd2382"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f8888e31e3a85943743f8fc15e71536bda1c81d5aa36d014a3c0c44481d7db6e"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:82eb849f085624f6a607538ee7b83a6d8126df6d2f7d3b319cb837b289123078"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7b8b8bf1189b3ba9b8de5c8db4d541b406611a71a955bbbd7385bbc45fcb786c"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5adf257bd58c1b8632046bbe43ee38c04e1038e9d37de9c57a94d6bd6ce5da34"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c350354efb159b8767a6244c166f66e67506e06c8924ed74669b2c70bc8735b1"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-win32.whl", hash = "sha256:02af06682e3590ab952599fbadac535ede5d60d78848e555aa58d0c0abbde786"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:86d1f65ac145e2c9ed71d8ffb1905e9bba3a91ae29ba55b4c46ae6fc31d7c0d4"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:3b447982ad46348c02cb90d230b75ac34e9886273df3a93eec0539308a6296d7"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:abf0d9f45ea5fb95051c8bfe43cb40cda383772f7e5023a83cc481ca2604d74e"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b09719a17a2301178fac4470d54b1680b18a5048b481cb8890e1ef820cb80455"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b3d9b48ee6e3967b7901c052b670c7dda6deb812c309439adaffdec55c6d7b78"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:edfe077ab09442d4ef3c52cb1f9dab89bff02f4524afc0acf2d46be17dc479f5"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3debd1150027933210c2fc321527c2299118aa929c2f5a0a80ab6953e3bd1908"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86f63face3a527284f7bb8a9d4f78988e3c06823f7bea2bd6f0e0e9298ca0403"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:24817cb02cbef7cd499f7c9a2735286b4782bd47a5b3516a0e84c50eab44b98e"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c71f16da1ed8949774ef79f4a0260d28b83b3a50c6576f8f4f0288d109777989"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:9cf3126b85822c4e53aa28c7ec9869b924d6fcfb76e77a45c44b83d91afd74f9"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:b3b2316b25644b23b54a6f6401074cebcecd1244c0b8e80111c9a3f1c8e83d65"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:03680bb39035fbcffe828eae9c3f8afc0428c91d38e7d61aa992ef7a59fb120e"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4cc152c5dd831641e995764f9f0b6589519f6f5123258ccaca8c6d34572fefa8"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-win32.whl", hash = "sha256:b8f3307af845803fb0b060ab76cf6dd3a13adc15b6b451f54281d25911eb92df"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:8eaf82f0eccd1505cf39a45a6bd0a8cf1c70dcfc30dba338207a969d91b965c0"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dc45229747b67ffc441b3de2f3ae5e62877a282ea828a5bdb67883c4ee4a8810"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f4a0033ce9a76e391542c182f0d48d084855b5fcba5010f707c8e8c34663d77"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ada214c6fa40f8d800e575de6b91a40d0548139e5dc457d2ebb61470abf50186"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b1121de0e9d6e6ca08289583d7491e7fcb18a439305b34a30b20d8215922d43c"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1063da2c85b95f2d1a430f1c33b55c9c17ffaf5e612e10aeaad641c55a9e2b9d"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70f1d09c0d7748b73290b29219e854b3207aea922f839437870d8cc2168e31cc"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:250c9eb0f4600361dd80d46112213dff2286231d92d3e52af1e5a6083d10cad9"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:750b446b2ffce1739e8578576092179160f6d26bd5e23eb1789c4d64d5af7dc7"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:fc52b79d83a3fe3a360902d3f5d79073a993597d48114c29485e9431092905d8"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:588245972aca710b5b68802c8cad9edaa98589b1b42ad2b53accd6910dad3545"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e39c7eb31e3f5b1f88caff88bcff1b7f8334975b46f6ac6e9fc725d829bc35d4"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-win32.whl", hash = "sha256:abecce40dfebbfa6abf8e324e1860092eeca6f7375c8c4e655a8afb61af58f2c"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:24a91a981f185721542a0b7c92e9054b7ab4fea0508a795846bc5b0abf8118d4"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:67b8cc9574bb518ec76dc8e705d4c39ae78bb96237cb533edac149352c1f39fe"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ac71b2977fb90c35d41c9453116e283fac47bb9096ad917b8819ca8b943abecd"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3ae38d325b512f63f8da31f826e6cb6c367336f95e418137286ba362925c877e"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:542da1178c1c6af8873e143910e2269add130a299c9106eef2594e15dae5e482"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30a85aed0b864ac88309b7d94be09f6046c834ef60762a8833b660139cfbad13"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aae32c93e0f64469f74ccc730a7cb21c7610af3a775157e50bbd38f816536b38"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15b26ddf78d57f1d143bdf32e820fd8935d36abe8a25eb9ec0b5a71c82eb3895"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7f5d10bae5d78e4551b7be7a9b29643a95aded9d0f602aa2ba584f0388e7a557"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:249c6470a2b60935bafd1d1d13cd613f8cd8388d53461c67397ee6a0f5dce741"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c5a74c359b2d47d26cdbbc7845e9662d6b08a1e915eb015d044729e92e7050b7"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:b5bcf60a228acae568e9911f410f9d9e0d43197d030ae5799e20dca8df588287"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:187d18082694a29005ba2944c882344b6748d5be69e3a89bf3cc9d878e548d5a"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:81bf654678e575403736b85ba3a7867e31c2c30a69bc57fe88e3ace52fb17b89"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-win32.whl", hash = "sha256:85a32721ddde63c9df9ebb0d2045b9691d9750cb139c161c80e500d210f5e26e"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:468d2a840567b13a590e67dd276c570f8de00ed767ecc611994c301d0f8c014f"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e0fc42822278451bc13a2e8626cf2218ba570f27856b536e00cfa53099724828"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:09c77f964f351a7369cc343911e0df63e762e42bac24cd7d18525961c81754f4"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:12ebea541c44fdc88ccb794a13fe861cc5e35d64ed689513a5c03d05b53b7c82"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:805dfea4ca10411a5296bcc75638017215a93ffb584c9e344731eef0dcfb026a"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:96c2b49eb6a72c0e4991d62406e365d87067ca14c1a729a870d22354e6f68115"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aaf7b34c5bc56b38c931a54f7952f1ff0ae77a2e82496583b247f7c969eb1479"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:619d1c96099be5823db34fe89e2582b336b5b074a7f47f819d6b3a57ff7bdb86"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0ac5e7015a5920cfce654c06618ec40c33e12801711da6b4258af59a8eff00a"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:93aa7eef6ee71c629b51ef873991d6911b906d7312c6e8e99790c0f33c576f89"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7966951325782121e67c81299a031f4c115615e68046f79b85856b86ebffc4cd"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:02673e456dc5ab13659f85196c534dc596d4ef260e4d86e856c3b2773ce09843"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:c2af80fb58f0f24b3f3adcb9148e6203fa67dd3f61c4af146ecad033024dde43"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:153e7b6e724761741e0974fc4dcd406d35ba70b92bfe3fedcb497226c93b9da7"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-win32.whl", hash = "sha256:d47ecf253780c90ee181d4d871cd655a789da937454045b17b5798da9393901a"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:d97d85fa63f315a8bdaba2af9a6a686e0eceab77b3089af45133252618e70884"}, + {file = "charset_normalizer-3.3.0-py3-none-any.whl", hash = "sha256:e46cd37076971c1040fc8c41273a8b3e2c624ce4f2be3f5dfcb7a430c1d3acc2"}, ] [[package]] name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ @@ -410,55 +536,54 @@ files = [ [[package]] name = "comm" -version = "0.1.2" +version = "0.1.4" description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." -category = "dev" optional = false python-versions = ">=3.6" files = [ - {file = "comm-0.1.2-py3-none-any.whl", hash = "sha256:9f3abf3515112fa7c55a42a6a5ab358735c9dccc8b5910a9d8e3ef5998130666"}, - {file = "comm-0.1.2.tar.gz", hash = "sha256:3e2f5826578e683999b93716285b3b1f344f157bf75fa9ce0a797564e742f062"}, + {file = "comm-0.1.4-py3-none-any.whl", hash = "sha256:6d52794cba11b36ed9860999cd10fd02d6b2eac177068fdd585e1e2f8a96e67a"}, + {file = "comm-0.1.4.tar.gz", hash = "sha256:354e40a59c9dd6db50c5cc6b4acc887d82e9603787f83b68c01a80a923984d15"}, ] [package.dependencies] -traitlets = ">=5.3" +traitlets = ">=4" [package.extras] +lint = ["black (>=22.6.0)", "mdformat (>0.7)", "mdformat-gfm (>=0.3.5)", "ruff (>=0.0.156)"] test = ["pytest"] +typing = ["mypy (>=0.990)"] [[package]] name = "debugpy" -version = "1.6.5" +version = "1.8.0" description = "An implementation of the Debug Adapter Protocol for Python" -category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "debugpy-1.6.5-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:696165f021a6a17da08163eaae84f3faf5d8be68fb78cd78488dd347e625279c"}, - {file = "debugpy-1.6.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17039e392d6f38388a68bd02c5f823b32a92142a851e96ba3ec52aeb1ce9d900"}, - {file = "debugpy-1.6.5-cp310-cp310-win32.whl", hash = "sha256:62a06eb78378292ba6c427d861246574dc8b84471904973797b29dd33c7c2495"}, - {file = "debugpy-1.6.5-cp310-cp310-win_amd64.whl", hash = "sha256:9984fc00ab372c97f63786c400107f54224663ea293daab7b365a5b821d26309"}, - {file = "debugpy-1.6.5-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:048368f121c08b00bbded161e8583817af5055982d2722450a69efe2051621c2"}, - {file = "debugpy-1.6.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:74e4eca42055759032e3f1909d1374ba1d729143e0c2729bb8cb5e8b5807c458"}, - {file = "debugpy-1.6.5-cp37-cp37m-win32.whl", hash = "sha256:0f9afcc8cad6424695f3356dc9a7406d5b18e37ee2e73f34792881a44b02cc50"}, - {file = "debugpy-1.6.5-cp37-cp37m-win_amd64.whl", hash = "sha256:b5a74ecebe5253344501d9b23f74459c46428b30437fa9254cfb8cb129943242"}, - {file = "debugpy-1.6.5-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:9e809ef787802c808995e5b6ade714a25fa187f892b41a412d418a15a9c4a432"}, - {file = "debugpy-1.6.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:947c686e8adb46726f3d5f19854f6aebf66c2edb91225643c7f44b40b064a235"}, - {file = "debugpy-1.6.5-cp38-cp38-win32.whl", hash = "sha256:377391341c4b86f403d93e467da8e2d05c22b683f08f9af3e16d980165b06b90"}, - {file = "debugpy-1.6.5-cp38-cp38-win_amd64.whl", hash = "sha256:286ae0c2def18ee0dc8a61fa76d51039ca8c11485b6ed3ef83e3efe8a23926ae"}, - {file = "debugpy-1.6.5-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:500dd4a9ff818f5c52dddb4a608c7de5371c2d7d905c505eb745556c579a9f11"}, - {file = "debugpy-1.6.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f3fab217fe7e2acb2d90732af1a871947def4e2b6654945ba1ebd94bd0bea26"}, - {file = "debugpy-1.6.5-cp39-cp39-win32.whl", hash = "sha256:15bc5febe0edc79726517b1f8d57d7ac7c784567b5ba804aab8b1c9d07a57018"}, - {file = "debugpy-1.6.5-cp39-cp39-win_amd64.whl", hash = "sha256:7e84d9e4420122384cb2cc762a00b4e17cbf998022890f89b195ce178f78ff47"}, - {file = "debugpy-1.6.5-py2.py3-none-any.whl", hash = "sha256:8116e40a1cd0593bd2aba01d4d560ee08f018da8e8fbd4cbd24ff09b5f0e41ef"}, - {file = "debugpy-1.6.5.zip", hash = "sha256:5e55e6c79e215239dd0794ee0bf655412b934735a58e9d705e5c544f596f1603"}, + {file = "debugpy-1.8.0-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:7fb95ca78f7ac43393cd0e0f2b6deda438ec7c5e47fa5d38553340897d2fbdfb"}, + {file = "debugpy-1.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef9ab7df0b9a42ed9c878afd3eaaff471fce3fa73df96022e1f5c9f8f8c87ada"}, + {file = "debugpy-1.8.0-cp310-cp310-win32.whl", hash = "sha256:a8b7a2fd27cd9f3553ac112f356ad4ca93338feadd8910277aff71ab24d8775f"}, + {file = "debugpy-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:5d9de202f5d42e62f932507ee8b21e30d49aae7e46d5b1dd5c908db1d7068637"}, + {file = "debugpy-1.8.0-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:ef54404365fae8d45cf450d0544ee40cefbcb9cb85ea7afe89a963c27028261e"}, + {file = "debugpy-1.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60009b132c91951354f54363f8ebdf7457aeb150e84abba5ae251b8e9f29a8a6"}, + {file = "debugpy-1.8.0-cp311-cp311-win32.whl", hash = "sha256:8cd0197141eb9e8a4566794550cfdcdb8b3db0818bdf8c49a8e8f8053e56e38b"}, + {file = "debugpy-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:a64093656c4c64dc6a438e11d59369875d200bd5abb8f9b26c1f5f723622e153"}, + {file = "debugpy-1.8.0-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:b05a6b503ed520ad58c8dc682749113d2fd9f41ffd45daec16e558ca884008cd"}, + {file = "debugpy-1.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c6fb41c98ec51dd010d7ed650accfd07a87fe5e93eca9d5f584d0578f28f35f"}, + {file = "debugpy-1.8.0-cp38-cp38-win32.whl", hash = "sha256:46ab6780159eeabb43c1495d9c84cf85d62975e48b6ec21ee10c95767c0590aa"}, + {file = "debugpy-1.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:bdc5ef99d14b9c0fcb35351b4fbfc06ac0ee576aeab6b2511702e5a648a2e595"}, + {file = "debugpy-1.8.0-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:61eab4a4c8b6125d41a34bad4e5fe3d2cc145caecd63c3fe953be4cc53e65bf8"}, + {file = "debugpy-1.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:125b9a637e013f9faac0a3d6a82bd17c8b5d2c875fb6b7e2772c5aba6d082332"}, + {file = "debugpy-1.8.0-cp39-cp39-win32.whl", hash = "sha256:57161629133113c97b387382045649a2b985a348f0c9366e22217c87b68b73c6"}, + {file = "debugpy-1.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:e3412f9faa9ade82aa64a50b602544efcba848c91384e9f93497a458767e6926"}, + {file = "debugpy-1.8.0-py2.py3-none-any.whl", hash = "sha256:9c9b0ac1ce2a42888199df1a1906e45e6f3c9555497643a85e0bf2406e3ffbc4"}, + {file = "debugpy-1.8.0.zip", hash = "sha256:12af2c55b419521e33d5fb21bd022df0b5eb267c3e178f1d374a63a2a6bdccd0"}, ] [[package]] name = "decorator" version = "5.1.1" description = "Decorators for Humans" -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -470,7 +595,6 @@ files = [ name = "defusedxml" version = "0.7.1" description = "XML bomb protection for Python stdlib modules" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -482,7 +606,6 @@ files = [ name = "entrypoints" version = "0.4" description = "Discover and load entry points from installed packages." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -490,31 +613,43 @@ files = [ {file = "entrypoints-0.4.tar.gz", hash = "sha256:b706eddaa9218a19ebcd67b56818f05bb27589b1ca9e8d797b74affad4ccacd4"}, ] +[[package]] +name = "exceptiongroup" +version = "1.1.3" +description = "Backport of PEP 654 (exception groups)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.1.3-py3-none-any.whl", hash = "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"}, + {file = "exceptiongroup-1.1.3.tar.gz", hash = "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9"}, +] + +[package.extras] +test = ["pytest (>=6)"] + [[package]] name = "executing" -version = "1.2.0" +version = "2.0.0" description = "Get the currently executing AST node of a frame, and other information" -category = "dev" optional = false python-versions = "*" files = [ - {file = "executing-1.2.0-py2.py3-none-any.whl", hash = "sha256:0314a69e37426e3608aada02473b4161d4caf5a4b244d1d0c48072b8fee7bacc"}, - {file = "executing-1.2.0.tar.gz", hash = "sha256:19da64c18d2d851112f09c287f8d3dbbdf725ab0e569077efb6cdcbd3497c107"}, + {file = "executing-2.0.0-py2.py3-none-any.whl", hash = "sha256:06df6183df67389625f4e763921c6cf978944721abf3e714000200aab95b0657"}, + {file = "executing-2.0.0.tar.gz", hash = "sha256:0ff053696fdeef426cda5bd18eacd94f82c91f49823a2e9090124212ceea9b08"}, ] [package.extras] -tests = ["asttokens", "littleutils", "pytest", "rich"] +tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich"] [[package]] name = "fastjsonschema" -version = "2.16.2" +version = "2.18.1" description = "Fastest Python implementation of JSON schema" -category = "dev" optional = false python-versions = "*" files = [ - {file = "fastjsonschema-2.16.2-py3-none-any.whl", hash = "sha256:21f918e8d9a1a4ba9c22e09574ba72267a6762d47822db9add95f6454e51cc1c"}, - {file = "fastjsonschema-2.16.2.tar.gz", hash = "sha256:01e366f25d9047816fe3d288cbfc3e10541daf0af2044763f3d0ade42476da18"}, + {file = "fastjsonschema-2.18.1-py3-none-any.whl", hash = "sha256:aec6a19e9f66e9810ab371cc913ad5f4e9e479b63a7072a2cd060a9369e329a8"}, + {file = "fastjsonschema-2.18.1.tar.gz", hash = "sha256:06dc8680d937628e993fa0cd278f196d20449a1adc087640710846b324d422ea"}, ] [package.extras] @@ -524,7 +659,6 @@ devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benc name = "fqdn" version = "1.5.1" description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" -category = "dev" optional = false python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" files = [ @@ -532,11 +666,80 @@ files = [ {file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"}, ] +[[package]] +name = "frozenlist" +version = "1.4.0" +description = "A list-like structure which implements collections.abc.MutableSequence" +optional = false +python-versions = ">=3.8" +files = [ + {file = "frozenlist-1.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:764226ceef3125e53ea2cb275000e309c0aa5464d43bd72abd661e27fffc26ab"}, + {file = "frozenlist-1.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d6484756b12f40003c6128bfcc3fa9f0d49a687e171186c2d85ec82e3758c559"}, + {file = "frozenlist-1.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9ac08e601308e41eb533f232dbf6b7e4cea762f9f84f6357136eed926c15d12c"}, + {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d081f13b095d74b67d550de04df1c756831f3b83dc9881c38985834387487f1b"}, + {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71932b597f9895f011f47f17d6428252fc728ba2ae6024e13c3398a087c2cdea"}, + {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:981b9ab5a0a3178ff413bca62526bb784249421c24ad7381e39d67981be2c326"}, + {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e41f3de4df3e80de75845d3e743b3f1c4c8613c3997a912dbf0229fc61a8b963"}, + {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6918d49b1f90821e93069682c06ffde41829c346c66b721e65a5c62b4bab0300"}, + {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0e5c8764c7829343d919cc2dfc587a8db01c4f70a4ebbc49abde5d4b158b007b"}, + {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8d0edd6b1c7fb94922bf569c9b092ee187a83f03fb1a63076e7774b60f9481a8"}, + {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e29cda763f752553fa14c68fb2195150bfab22b352572cb36c43c47bedba70eb"}, + {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:0c7c1b47859ee2cac3846fde1c1dc0f15da6cec5a0e5c72d101e0f83dcb67ff9"}, + {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:901289d524fdd571be1c7be054f48b1f88ce8dddcbdf1ec698b27d4b8b9e5d62"}, + {file = "frozenlist-1.4.0-cp310-cp310-win32.whl", hash = "sha256:1a0848b52815006ea6596c395f87449f693dc419061cc21e970f139d466dc0a0"}, + {file = "frozenlist-1.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:b206646d176a007466358aa21d85cd8600a415c67c9bd15403336c331a10d956"}, + {file = "frozenlist-1.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:de343e75f40e972bae1ef6090267f8260c1446a1695e77096db6cfa25e759a95"}, + {file = "frozenlist-1.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ad2a9eb6d9839ae241701d0918f54c51365a51407fd80f6b8289e2dfca977cc3"}, + {file = "frozenlist-1.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bd7bd3b3830247580de99c99ea2a01416dfc3c34471ca1298bccabf86d0ff4dc"}, + {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bdf1847068c362f16b353163391210269e4f0569a3c166bc6a9f74ccbfc7e839"}, + {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:38461d02d66de17455072c9ba981d35f1d2a73024bee7790ac2f9e361ef1cd0c"}, + {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5a32087d720c608f42caed0ef36d2b3ea61a9d09ee59a5142d6070da9041b8f"}, + {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dd65632acaf0d47608190a71bfe46b209719bf2beb59507db08ccdbe712f969b"}, + {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:261b9f5d17cac914531331ff1b1d452125bf5daa05faf73b71d935485b0c510b"}, + {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b89ac9768b82205936771f8d2eb3ce88503b1556324c9f903e7156669f521472"}, + {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:008eb8b31b3ea6896da16c38c1b136cb9fec9e249e77f6211d479db79a4eaf01"}, + {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e74b0506fa5aa5598ac6a975a12aa8928cbb58e1f5ac8360792ef15de1aa848f"}, + {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:490132667476f6781b4c9458298b0c1cddf237488abd228b0b3650e5ecba7467"}, + {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:76d4711f6f6d08551a7e9ef28c722f4a50dd0fc204c56b4bcd95c6cc05ce6fbb"}, + {file = "frozenlist-1.4.0-cp311-cp311-win32.whl", hash = "sha256:a02eb8ab2b8f200179b5f62b59757685ae9987996ae549ccf30f983f40602431"}, + {file = "frozenlist-1.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:515e1abc578dd3b275d6a5114030b1330ba044ffba03f94091842852f806f1c1"}, + {file = "frozenlist-1.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:f0ed05f5079c708fe74bf9027e95125334b6978bf07fd5ab923e9e55e5fbb9d3"}, + {file = "frozenlist-1.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ca265542ca427bf97aed183c1676e2a9c66942e822b14dc6e5f42e038f92a503"}, + {file = "frozenlist-1.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:491e014f5c43656da08958808588cc6c016847b4360e327a62cb308c791bd2d9"}, + {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17ae5cd0f333f94f2e03aaf140bb762c64783935cc764ff9c82dff626089bebf"}, + {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1e78fb68cf9c1a6aa4a9a12e960a5c9dfbdb89b3695197aa7064705662515de2"}, + {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5655a942f5f5d2c9ed93d72148226d75369b4f6952680211972a33e59b1dfdc"}, + {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c11b0746f5d946fecf750428a95f3e9ebe792c1ee3b1e96eeba145dc631a9672"}, + {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e66d2a64d44d50d2543405fb183a21f76b3b5fd16f130f5c99187c3fb4e64919"}, + {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:88f7bc0fcca81f985f78dd0fa68d2c75abf8272b1f5c323ea4a01a4d7a614efc"}, + {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5833593c25ac59ede40ed4de6d67eb42928cca97f26feea219f21d0ed0959b79"}, + {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:fec520865f42e5c7f050c2a79038897b1c7d1595e907a9e08e3353293ffc948e"}, + {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:b826d97e4276750beca7c8f0f1a4938892697a6bcd8ec8217b3312dad6982781"}, + {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ceb6ec0a10c65540421e20ebd29083c50e6d1143278746a4ef6bcf6153171eb8"}, + {file = "frozenlist-1.4.0-cp38-cp38-win32.whl", hash = "sha256:2b8bcf994563466db019fab287ff390fffbfdb4f905fc77bc1c1d604b1c689cc"}, + {file = "frozenlist-1.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:a6c8097e01886188e5be3e6b14e94ab365f384736aa1fca6a0b9e35bd4a30bc7"}, + {file = "frozenlist-1.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6c38721585f285203e4b4132a352eb3daa19121a035f3182e08e437cface44bf"}, + {file = "frozenlist-1.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a0c6da9aee33ff0b1a451e867da0c1f47408112b3391dd43133838339e410963"}, + {file = "frozenlist-1.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:93ea75c050c5bb3d98016b4ba2497851eadf0ac154d88a67d7a6816206f6fa7f"}, + {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f61e2dc5ad442c52b4887f1fdc112f97caeff4d9e6ebe78879364ac59f1663e1"}, + {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa384489fefeb62321b238e64c07ef48398fe80f9e1e6afeff22e140e0850eef"}, + {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:10ff5faaa22786315ef57097a279b833ecab1a0bfb07d604c9cbb1c4cdc2ed87"}, + {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:007df07a6e3eb3e33e9a1fe6a9db7af152bbd8a185f9aaa6ece10a3529e3e1c6"}, + {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f4f399d28478d1f604c2ff9119907af9726aed73680e5ed1ca634d377abb087"}, + {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c5374b80521d3d3f2ec5572e05adc94601985cc526fb276d0c8574a6d749f1b3"}, + {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ce31ae3e19f3c902de379cf1323d90c649425b86de7bbdf82871b8a2a0615f3d"}, + {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7211ef110a9194b6042449431e08c4d80c0481e5891e58d429df5899690511c2"}, + {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:556de4430ce324c836789fa4560ca62d1591d2538b8ceb0b4f68fb7b2384a27a"}, + {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7645a8e814a3ee34a89c4a372011dcd817964ce8cb273c8ed6119d706e9613e3"}, + {file = "frozenlist-1.4.0-cp39-cp39-win32.whl", hash = "sha256:19488c57c12d4e8095a922f328df3f179c820c212940a498623ed39160bc3c2f"}, + {file = "frozenlist-1.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:6221d84d463fb110bdd7619b69cb43878a11d51cbb9394ae3105d082d5199167"}, + {file = "frozenlist-1.4.0.tar.gz", hash = "sha256:09163bdf0b2907454042edb19f887c6d33806adc71fbd54afc14908bfdc22251"}, +] + [[package]] name = "idna" version = "3.4" description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -544,49 +747,29 @@ files = [ {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, ] -[[package]] -name = "importlib-metadata" -version = "6.0.0" -description = "Read metadata from Python packages" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "importlib_metadata-6.0.0-py3-none-any.whl", hash = "sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad"}, - {file = "importlib_metadata-6.0.0.tar.gz", hash = "sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d"}, -] - -[package.dependencies] -zipp = ">=0.5" - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -perf = ["ipython"] -testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)"] - [[package]] name = "ipykernel" -version = "6.20.2" +version = "6.25.2" description = "IPython Kernel for Jupyter" -category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "ipykernel-6.20.2-py3-none-any.whl", hash = "sha256:5d0675d5f48bf6a95fd517d7b70bcb3b2c5631b2069949b5c2d6e1d7477fb5a0"}, - {file = "ipykernel-6.20.2.tar.gz", hash = "sha256:1893c5b847033cd7a58f6843b04a9349ffb1031bc6588401cadc9adb58da428e"}, + {file = "ipykernel-6.25.2-py3-none-any.whl", hash = "sha256:2e2ee359baba19f10251b99415bb39de1e97d04e1fab385646f24f0596510b77"}, + {file = "ipykernel-6.25.2.tar.gz", hash = "sha256:f468ddd1f17acb48c8ce67fcfa49ba6d46d4f9ac0438c1f441be7c3d1372230b"}, ] [package.dependencies] appnope = {version = "*", markers = "platform_system == \"Darwin\""} comm = ">=0.1.1" -debugpy = ">=1.0" +debugpy = ">=1.6.5" ipython = ">=7.23.1" jupyter-client = ">=6.1.12" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" matplotlib-inline = ">=0.1" nest-asyncio = "*" packaging = "*" psutil = "*" -pyzmq = ">=17" +pyzmq = ">=20" tornado = ">=6.1" traitlets = ">=5.4.0" @@ -599,14 +782,13 @@ test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio" [[package]] name = "ipython" -version = "8.8.0" +version = "8.16.1" description = "IPython: Productive Interactive Computing" -category = "dev" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "ipython-8.8.0-py3-none-any.whl", hash = "sha256:da01e6df1501e6e7c32b5084212ddadd4ee2471602e2cf3e0190f4de6b0ea481"}, - {file = "ipython-8.8.0.tar.gz", hash = "sha256:f3bf2c08505ad2c3f4ed5c46ae0331a8547d36bf4b21a451e8ae80c0791db95b"}, + {file = "ipython-8.16.1-py3-none-any.whl", hash = "sha256:0852469d4d579d9cd613c220af7bf0c9cc251813e12be647cb9d463939db9b1e"}, + {file = "ipython-8.16.1.tar.gz", hash = "sha256:ad52f58fca8f9f848e256c629eff888efc0528c12fe0f8ec14f33205f23ef938"}, ] [package.dependencies] @@ -614,19 +796,20 @@ appnope = {version = "*", markers = "sys_platform == \"darwin\""} backcall = "*" colorama = {version = "*", markers = "sys_platform == \"win32\""} decorator = "*" +exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} jedi = ">=0.16" matplotlib-inline = "*" pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} pickleshare = "*" -prompt-toolkit = ">=3.0.11,<3.1.0" +prompt-toolkit = ">=3.0.30,<3.0.37 || >3.0.37,<3.1.0" pygments = ">=2.4.0" stack-data = "*" traitlets = ">=5" [package.extras] -all = ["black", "curio", "docrepr", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.20)", "pandas", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"] +all = ["black", "curio", "docrepr", "exceptiongroup", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.21)", "pandas", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"] black = ["black"] -doc = ["docrepr", "ipykernel", "matplotlib", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "typing-extensions"] +doc = ["docrepr", "exceptiongroup", "ipykernel", "matplotlib", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "typing-extensions"] kernel = ["ipykernel"] nbconvert = ["nbconvert"] nbformat = ["nbformat"] @@ -634,13 +817,12 @@ notebook = ["ipywidgets", "notebook"] parallel = ["ipyparallel"] qtconsole = ["qtconsole"] test = ["pytest (<7.1)", "pytest-asyncio", "testpath"] -test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.20)", "pandas", "pytest (<7.1)", "pytest-asyncio", "testpath", "trio"] +test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.21)", "pandas", "pytest (<7.1)", "pytest-asyncio", "testpath", "trio"] [[package]] name = "ipython-genutils" version = "0.2.0" description = "Vestigial utilities from IPython" -category = "dev" optional = false python-versions = "*" files = [ @@ -652,7 +834,6 @@ files = [ name = "isoduration" version = "20.11.0" description = "Operations with ISO 8601 durations" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -665,29 +846,27 @@ arrow = ">=0.15.0" [[package]] name = "jedi" -version = "0.18.2" +version = "0.19.1" description = "An autocompletion tool for Python that can be used for text editors." -category = "dev" optional = false python-versions = ">=3.6" files = [ - {file = "jedi-0.18.2-py2.py3-none-any.whl", hash = "sha256:203c1fd9d969ab8f2119ec0a3342e0b49910045abe6af0a3ae83a5764d54639e"}, - {file = "jedi-0.18.2.tar.gz", hash = "sha256:bae794c30d07f6d910d32a7048af09b5a39ed740918da923c6b780790ebac612"}, + {file = "jedi-0.19.1-py2.py3-none-any.whl", hash = "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0"}, + {file = "jedi-0.19.1.tar.gz", hash = "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd"}, ] [package.dependencies] -parso = ">=0.8.0,<0.9.0" +parso = ">=0.8.3,<0.9.0" [package.extras] docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] -qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] -testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] +qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] +testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] [[package]] name = "jinja2" version = "3.1.2" description = "A very fast and expressive template engine." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -703,14 +882,13 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "json5" -version = "0.9.11" +version = "0.9.14" description = "A Python implementation of the JSON5 data format." -category = "dev" optional = false python-versions = "*" files = [ - {file = "json5-0.9.11-py2.py3-none-any.whl", hash = "sha256:1aa54b80b5e507dfe31d12b7743a642e2ffa6f70bf73b8e3d7d1d5fba83d99bd"}, - {file = "json5-0.9.11.tar.gz", hash = "sha256:4f1e196acc55b83985a51318489f345963c7ba84aa37607e49073066c562e99b"}, + {file = "json5-0.9.14-py2.py3-none-any.whl", hash = "sha256:740c7f1b9e584a468dbb2939d8d458db3427f2c93ae2139d05f47e453eae964f"}, + {file = "json5-0.9.14.tar.gz", hash = "sha256:9ed66c3a6ca3510a976a9ef9b8c0787de24802724ab1860bc0153c7fdd589b02"}, ] [package.extras] @@ -718,37 +896,37 @@ dev = ["hypothesis"] [[package]] name = "jsonpointer" -version = "2.3" +version = "2.4" description = "Identify specific nodes in a JSON document (RFC 6901)" -category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" files = [ - {file = "jsonpointer-2.3-py2.py3-none-any.whl", hash = "sha256:51801e558539b4e9cd268638c078c6c5746c9ac96bc38152d443400e4f3793e9"}, - {file = "jsonpointer-2.3.tar.gz", hash = "sha256:97cba51526c829282218feb99dab1b1e6bdf8efd1c43dc9d57be093c0d69c99a"}, + {file = "jsonpointer-2.4-py2.py3-none-any.whl", hash = "sha256:15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a"}, + {file = "jsonpointer-2.4.tar.gz", hash = "sha256:585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88"}, ] [[package]] name = "jsonschema" -version = "4.17.3" +version = "4.19.1" description = "An implementation of JSON Schema validation for Python" -category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "jsonschema-4.17.3-py3-none-any.whl", hash = "sha256:a870ad254da1a8ca84b6a2905cac29d265f805acc57af304784962a2aa6508f6"}, - {file = "jsonschema-4.17.3.tar.gz", hash = "sha256:0f864437ab8b6076ba6707453ef8f98a6a0d512a80e93f8abdb676f737ecb60d"}, + {file = "jsonschema-4.19.1-py3-none-any.whl", hash = "sha256:cd5f1f9ed9444e554b38ba003af06c0a8c2868131e56bfbef0550fb450c0330e"}, + {file = "jsonschema-4.19.1.tar.gz", hash = "sha256:ec84cc37cfa703ef7cd4928db24f9cb31428a5d0fa77747b8b51a847458e0bbf"}, ] [package.dependencies] -attrs = ">=17.4.0" +attrs = ">=22.2.0" fqdn = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} idna = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} isoduration = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} jsonpointer = {version = ">1.13", optional = true, markers = "extra == \"format-nongpl\""} -pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2" +jsonschema-specifications = ">=2023.03.6" +referencing = ">=0.28.4" rfc3339-validator = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} rfc3986-validator = {version = ">0.1.0", optional = true, markers = "extra == \"format-nongpl\""} +rpds-py = ">=0.7.1" uri-template = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} webcolors = {version = ">=1.11", optional = true, markers = "extra == \"format-nongpl\""} @@ -756,11 +934,24 @@ webcolors = {version = ">=1.11", optional = true, markers = "extra == \"format-n format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] +[[package]] +name = "jsonschema-specifications" +version = "2023.7.1" +description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jsonschema_specifications-2023.7.1-py3-none-any.whl", hash = "sha256:05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1"}, + {file = "jsonschema_specifications-2023.7.1.tar.gz", hash = "sha256:c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb"}, +] + +[package.dependencies] +referencing = ">=0.28.0" + [[package]] name = "jupyter-client" version = "7.4.9" description = "Jupyter protocol implementation and client libraries" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -783,19 +974,18 @@ test = ["codecov", "coverage", "ipykernel (>=6.12)", "ipython", "mypy", "pre-com [[package]] name = "jupyter-core" -version = "5.1.3" +version = "5.4.0" description = "Jupyter core package. A base package on which Jupyter projects rely." -category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "jupyter_core-5.1.3-py3-none-any.whl", hash = "sha256:d23ab7db81ca1759f13780cd6b65f37f59bf8e0186ac422d5ca4982cc7d56716"}, - {file = "jupyter_core-5.1.3.tar.gz", hash = "sha256:82e1cff0ef804c38677eff7070d5ff1d45037fef01a2d9ba9e6b7b8201831e9f"}, + {file = "jupyter_core-5.4.0-py3-none-any.whl", hash = "sha256:66e252f675ac04dcf2feb6ed4afb3cd7f68cf92f483607522dc251f32d471571"}, + {file = "jupyter_core-5.4.0.tar.gz", hash = "sha256:e4b98344bb94ee2e3e6c4519a97d001656009f9cb2b7f2baf15b3c205770011d"}, ] [package.dependencies] platformdirs = ">=2.5" -pywin32 = {version = ">=1.0", markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\""} +pywin32 = {version = ">=300", markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\""} traitlets = ">=5.3" [package.extras] @@ -804,20 +994,20 @@ test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] [[package]] name = "jupyter-events" -version = "0.6.3" +version = "0.8.0" description = "Jupyter Event System library" -category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "jupyter_events-0.6.3-py3-none-any.whl", hash = "sha256:57a2749f87ba387cd1bfd9b22a0875b889237dbf2edc2121ebb22bde47036c17"}, - {file = "jupyter_events-0.6.3.tar.gz", hash = "sha256:9a6e9995f75d1b7146b436ea24d696ce3a35bfa8bfe45e0c33c334c79464d0b3"}, + {file = "jupyter_events-0.8.0-py3-none-any.whl", hash = "sha256:81f07375c7673ff298bfb9302b4a981864ec64edaed75ca0fe6f850b9b045525"}, + {file = "jupyter_events-0.8.0.tar.gz", hash = "sha256:fda08f0defce5e16930542ce60634ba48e010830d50073c3dfd235759cee77bf"}, ] [package.dependencies] -jsonschema = {version = ">=3.2.0", extras = ["format-nongpl"]} +jsonschema = {version = ">=4.18.0", extras = ["format-nongpl"]} python-json-logger = ">=2.0.4" pyyaml = ">=5.3" +referencing = "*" rfc3339-validator = "*" rfc3986-validator = ">=0.1.1" traitlets = ">=5.3" @@ -825,49 +1015,48 @@ traitlets = ">=5.3" [package.extras] cli = ["click", "rich"] docs = ["jupyterlite-sphinx", "myst-parser", "pydata-sphinx-theme", "sphinxcontrib-spelling"] -test = ["click", "coverage", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "pytest-console-scripts", "pytest-cov", "rich"] +test = ["click", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "pytest-console-scripts", "rich"] [[package]] name = "jupyter-server" -version = "2.1.0" +version = "2.8.0" description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." -category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "jupyter_server-2.1.0-py3-none-any.whl", hash = "sha256:90cd6f2bd0581ddd9b2dbe82026a0f4c228a1d95c86e22460efbfdfc931fcf56"}, - {file = "jupyter_server-2.1.0.tar.gz", hash = "sha256:efaae5e4f0d5f22c7f2f2dc848635036ee74a2df02abed52d30d9d95121ad382"}, + {file = "jupyter_server-2.8.0-py3-none-any.whl", hash = "sha256:c57270faa6530393ae69783a2d2f1874c718b9f109080581ea076b05713249fa"}, + {file = "jupyter_server-2.8.0.tar.gz", hash = "sha256:b11e2ba80667c75f55630faf8ac3d5809f8734f9006d65cce117c46a0a516ab8"}, ] [package.dependencies] -anyio = ">=3.1.0,<4" +anyio = ">=3.1.0" argon2-cffi = "*" jinja2 = "*" jupyter-client = ">=7.4.4" -jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" -jupyter-events = ">=0.4.0" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +jupyter-events = ">=0.6.0" jupyter-server-terminals = "*" nbconvert = ">=6.4.4" nbformat = ">=5.3.0" +overrides = "*" packaging = "*" prometheus-client = "*" pywinpty = {version = "*", markers = "os_name == \"nt\""} pyzmq = ">=24" -send2trash = "*" +send2trash = ">=1.8.2" terminado = ">=0.8.3" tornado = ">=6.2.0" traitlets = ">=5.6.0" websocket-client = "*" [package.extras] -docs = ["docutils (<0.20)", "ipykernel", "jinja2", "jupyter-client", "jupyter-server", "mistune (<1.0.0)", "myst-parser", "nbformat", "prometheus-client", "pydata-sphinx-theme", "send2trash", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-openapi", "sphinxcontrib-spelling", "sphinxemoji", "tornado"] -test = ["ipykernel", "pre-commit", "pytest (>=7.0)", "pytest-console-scripts", "pytest-jupyter[server] (>=0.4)", "pytest-timeout", "requests"] +docs = ["ipykernel", "jinja2", "jupyter-client", "jupyter-server", "myst-parser", "nbformat", "prometheus-client", "pydata-sphinx-theme", "send2trash", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-openapi (>=0.8.0)", "sphinxcontrib-spelling", "sphinxemoji", "tornado", "typing-extensions"] +test = ["flaky", "ipykernel", "pre-commit", "pytest (>=7.0)", "pytest-console-scripts", "pytest-jupyter[server] (>=0.4)", "pytest-timeout", "requests"] [[package]] name = "jupyter-server-terminals" version = "0.4.4" description = "A Jupyter Server Extension Providing Terminals." -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -887,7 +1076,6 @@ test = ["coverage", "jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-cov", name = "jupyterlab" version = "3.5.2" description = "JupyterLab computational environment" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -914,7 +1102,6 @@ test = ["check-manifest", "coverage", "jupyterlab-server[test]", "pre-commit", " name = "jupyterlab-pygments" version = "0.2.2" description = "Pygments theme using JupyterLab CSS variables" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -924,36 +1111,33 @@ files = [ [[package]] name = "jupyterlab-server" -version = "2.19.0" +version = "2.25.0" description = "A set of server components for JupyterLab and JupyterLab like applications." -category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "jupyterlab_server-2.19.0-py3-none-any.whl", hash = "sha256:51f6922e34f9f3db875051f4f7b57539a04ddd030f42d9ce6062dedf67bf7f2f"}, - {file = "jupyterlab_server-2.19.0.tar.gz", hash = "sha256:9aec21a2183bbedd9f91a86628355449575f1862d88b28ad5f905019d31e6c21"}, + {file = "jupyterlab_server-2.25.0-py3-none-any.whl", hash = "sha256:c9f67a98b295c5dee87f41551b0558374e45d449f3edca153dd722140630dcb2"}, + {file = "jupyterlab_server-2.25.0.tar.gz", hash = "sha256:77c2f1f282d610f95e496e20d5bf1d2a7706826dfb7b18f3378ae2870d272fb7"}, ] [package.dependencies] babel = ">=2.10" -importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} jinja2 = ">=3.0.3" json5 = ">=0.9.0" -jsonschema = ">=4.17.3" +jsonschema = ">=4.18.0" jupyter-server = ">=1.21,<3" packaging = ">=21.3" -requests = ">=2.28" +requests = ">=2.31" [package.extras] -docs = ["autodoc-traits", "docutils (<0.20)", "jinja2 (<3.2.0)", "mistune (<3)", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinxcontrib-openapi"] -openapi = ["openapi-core (>=0.16.1)", "ruamel-yaml"] -test = ["codecov", "ipykernel", "jupyterlab-server[openapi]", "openapi-spec-validator (>=0.5.1)", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] +docs = ["autodoc-traits", "jinja2 (<3.2.0)", "mistune (<4)", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinxcontrib-openapi (>0.8)"] +openapi = ["openapi-core (>=0.18.0,<0.19.0)", "ruamel-yaml"] +test = ["hatch", "ipykernel", "openapi-core (>=0.18.0,<0.19.0)", "openapi-spec-validator (>=0.6.0,<0.7.0)", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "ruamel-yaml", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] [[package]] name = "kaggle" version = "1.5.12" description = "Kaggle API" -category = "main" optional = false python-versions = "*" files = [ @@ -971,69 +1155,77 @@ urllib3 = "*" [[package]] name = "markupsafe" -version = "2.1.2" +version = "2.1.3" description = "Safely add untrusted strings to HTML/XML markup." -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-win32.whl", hash = "sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-win32.whl", hash = "sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-win32.whl", hash = "sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-win32.whl", hash = "sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-win32.whl", hash = "sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed"}, - {file = "MarkupSafe-2.1.2.tar.gz", hash = "sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win32.whl", hash = "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-win32.whl", hash = "sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win32.whl", hash = "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win32.whl", hash = "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win32.whl", hash = "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"}, + {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"}, ] [[package]] name = "matplotlib-inline" version = "0.1.6" description = "Inline Matplotlib backend for Jupyter" -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -1046,26 +1238,107 @@ traitlets = "*" [[package]] name = "mistune" -version = "2.0.4" -description = "A sane Markdown parser with useful plugins and renderers" -category = "dev" +version = "3.0.2" +description = "A sane and fast Markdown parser with useful plugins and renderers" optional = false -python-versions = "*" +python-versions = ">=3.7" files = [ - {file = "mistune-2.0.4-py2.py3-none-any.whl", hash = "sha256:182cc5ee6f8ed1b807de6b7bb50155df7b66495412836b9a74c8fbdfc75fe36d"}, - {file = "mistune-2.0.4.tar.gz", hash = "sha256:9ee0a66053e2267aba772c71e06891fa8f1af6d4b01d5e84e267b4570d4d9808"}, + {file = "mistune-3.0.2-py3-none-any.whl", hash = "sha256:71481854c30fdbc938963d3605b72501f5c10a9320ecd412c121c163a1c7d205"}, + {file = "mistune-3.0.2.tar.gz", hash = "sha256:fc7f93ded930c92394ef2cb6f04a8aabab4117a91449e72dcc8dfa646a508be8"}, +] + +[[package]] +name = "multidict" +version = "6.0.4" +description = "multidict implementation" +optional = false +python-versions = ">=3.7" +files = [ + {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b1a97283e0c85772d613878028fec909f003993e1007eafa715b24b377cb9b8"}, + {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eeb6dcc05e911516ae3d1f207d4b0520d07f54484c49dfc294d6e7d63b734171"}, + {file = "multidict-6.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d6d635d5209b82a3492508cf5b365f3446afb65ae7ebd755e70e18f287b0adf7"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c048099e4c9e9d615545e2001d3d8a4380bd403e1a0578734e0d31703d1b0c0b"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ea20853c6dbbb53ed34cb4d080382169b6f4554d394015f1bef35e881bf83547"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16d232d4e5396c2efbbf4f6d4df89bfa905eb0d4dc5b3549d872ab898451f569"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36c63aaa167f6c6b04ef2c85704e93af16c11d20de1d133e39de6a0e84582a93"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:64bdf1086b6043bf519869678f5f2757f473dee970d7abf6da91ec00acb9cb98"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:43644e38f42e3af682690876cff722d301ac585c5b9e1eacc013b7a3f7b696a0"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7582a1d1030e15422262de9f58711774e02fa80df0d1578995c76214f6954988"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ddff9c4e225a63a5afab9dd15590432c22e8057e1a9a13d28ed128ecf047bbdc"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ee2a1ece51b9b9e7752e742cfb661d2a29e7bcdba2d27e66e28a99f1890e4fa0"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a2e4369eb3d47d2034032a26c7a80fcb21a2cb22e1173d761a162f11e562caa5"}, + {file = "multidict-6.0.4-cp310-cp310-win32.whl", hash = "sha256:574b7eae1ab267e5f8285f0fe881f17efe4b98c39a40858247720935b893bba8"}, + {file = "multidict-6.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:4dcbb0906e38440fa3e325df2359ac6cb043df8e58c965bb45f4e406ecb162cc"}, + {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0dfad7a5a1e39c53ed00d2dd0c2e36aed4650936dc18fd9a1826a5ae1cad6f03"}, + {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:64da238a09d6039e3bd39bb3aee9c21a5e34f28bfa5aa22518581f910ff94af3"}, + {file = "multidict-6.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ff959bee35038c4624250473988b24f846cbeb2c6639de3602c073f10410ceba"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01a3a55bd90018c9c080fbb0b9f4891db37d148a0a18722b42f94694f8b6d4c9"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5cb09abb18c1ea940fb99360ea0396f34d46566f157122c92dfa069d3e0e982"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:666daae833559deb2d609afa4490b85830ab0dfca811a98b70a205621a6109fe"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11bdf3f5e1518b24530b8241529d2050014c884cf18b6fc69c0c2b30ca248710"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d18748f2d30f94f498e852c67d61261c643b349b9d2a581131725595c45ec6c"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:458f37be2d9e4c95e2d8866a851663cbc76e865b78395090786f6cd9b3bbf4f4"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:b1a2eeedcead3a41694130495593a559a668f382eee0727352b9a41e1c45759a"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7d6ae9d593ef8641544d6263c7fa6408cc90370c8cb2bbb65f8d43e5b0351d9c"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5979b5632c3e3534e42ca6ff856bb24b2e3071b37861c2c727ce220d80eee9ed"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dcfe792765fab89c365123c81046ad4103fcabbc4f56d1c1997e6715e8015461"}, + {file = "multidict-6.0.4-cp311-cp311-win32.whl", hash = "sha256:3601a3cece3819534b11d4efc1eb76047488fddd0c85a3948099d5da4d504636"}, + {file = "multidict-6.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:81a4f0b34bd92df3da93315c6a59034df95866014ac08535fc819f043bfd51f0"}, + {file = "multidict-6.0.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:67040058f37a2a51ed8ea8f6b0e6ee5bd78ca67f169ce6122f3e2ec80dfe9b78"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:853888594621e6604c978ce2a0444a1e6e70c8d253ab65ba11657659dcc9100f"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:39ff62e7d0f26c248b15e364517a72932a611a9b75f35b45be078d81bdb86603"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af048912e045a2dc732847d33821a9d84ba553f5c5f028adbd364dd4765092ac"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e8b901e607795ec06c9e42530788c45ac21ef3aaa11dbd0c69de543bfb79a9"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62501642008a8b9871ddfccbf83e4222cf8ac0d5aeedf73da36153ef2ec222d2"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:99b76c052e9f1bc0721f7541e5e8c05db3941eb9ebe7b8553c625ef88d6eefde"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:509eac6cf09c794aa27bcacfd4d62c885cce62bef7b2c3e8b2e49d365b5003fe"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:21a12c4eb6ddc9952c415f24eef97e3e55ba3af61f67c7bc388dcdec1404a067"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:5cad9430ab3e2e4fa4a2ef4450f548768400a2ac635841bc2a56a2052cdbeb87"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ab55edc2e84460694295f401215f4a58597f8f7c9466faec545093045476327d"}, + {file = "multidict-6.0.4-cp37-cp37m-win32.whl", hash = "sha256:5a4dcf02b908c3b8b17a45fb0f15b695bf117a67b76b7ad18b73cf8e92608775"}, + {file = "multidict-6.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:6ed5f161328b7df384d71b07317f4d8656434e34591f20552c7bcef27b0ab88e"}, + {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5fc1b16f586f049820c5c5b17bb4ee7583092fa0d1c4e28b5239181ff9532e0c"}, + {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1502e24330eb681bdaa3eb70d6358e818e8e8f908a22a1851dfd4e15bc2f8161"}, + {file = "multidict-6.0.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b692f419760c0e65d060959df05f2a531945af31fda0c8a3b3195d4efd06de11"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45e1ecb0379bfaab5eef059f50115b54571acfbe422a14f668fc8c27ba410e7e"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ddd3915998d93fbcd2566ddf9cf62cdb35c9e093075f862935573d265cf8f65d"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:59d43b61c59d82f2effb39a93c48b845efe23a3852d201ed2d24ba830d0b4cf2"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc8e1d0c705233c5dd0c5e6460fbad7827d5d36f310a0fadfd45cc3029762258"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6aa0418fcc838522256761b3415822626f866758ee0bc6632c9486b179d0b52"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6748717bb10339c4760c1e63da040f5f29f5ed6e59d76daee30305894069a660"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4d1a3d7ef5e96b1c9e92f973e43aa5e5b96c659c9bc3124acbbd81b0b9c8a951"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4372381634485bec7e46718edc71528024fcdc6f835baefe517b34a33c731d60"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:fc35cb4676846ef752816d5be2193a1e8367b4c1397b74a565a9d0389c433a1d"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4b9d9e4e2b37daddb5c23ea33a3417901fa7c7b3dee2d855f63ee67a0b21e5b1"}, + {file = "multidict-6.0.4-cp38-cp38-win32.whl", hash = "sha256:e41b7e2b59679edfa309e8db64fdf22399eec4b0b24694e1b2104fb789207779"}, + {file = "multidict-6.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:d6c254ba6e45d8e72739281ebc46ea5eb5f101234f3ce171f0e9f5cc86991480"}, + {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:16ab77bbeb596e14212e7bab8429f24c1579234a3a462105cda4a66904998664"}, + {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc779e9e6f7fda81b3f9aa58e3a6091d49ad528b11ed19f6621408806204ad35"}, + {file = "multidict-6.0.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ceef517eca3e03c1cceb22030a3e39cb399ac86bff4e426d4fc6ae49052cc60"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:281af09f488903fde97923c7744bb001a9b23b039a909460d0f14edc7bf59706"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52f2dffc8acaba9a2f27174c41c9e57f60b907bb9f096b36b1a1f3be71c6284d"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b41156839806aecb3641f3208c0dafd3ac7775b9c4c422d82ee2a45c34ba81ca"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5e3fc56f88cc98ef8139255cf8cd63eb2c586531e43310ff859d6bb3a6b51f1"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8316a77808c501004802f9beebde51c9f857054a0c871bd6da8280e718444449"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f70b98cd94886b49d91170ef23ec5c0e8ebb6f242d734ed7ed677b24d50c82cf"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bf6774e60d67a9efe02b3616fee22441d86fab4c6d335f9d2051d19d90a40063"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:e69924bfcdda39b722ef4d9aa762b2dd38e4632b3641b1d9a57ca9cd18f2f83a"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:6b181d8c23da913d4ff585afd1155a0e1194c0b50c54fcfe286f70cdaf2b7176"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:52509b5be062d9eafc8170e53026fbc54cf3b32759a23d07fd935fb04fc22d95"}, + {file = "multidict-6.0.4-cp39-cp39-win32.whl", hash = "sha256:27c523fbfbdfd19c6867af7346332b62b586eed663887392cff78d614f9ec313"}, + {file = "multidict-6.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:33029f5734336aa0d4c0384525da0387ef89148dc7191aae00ca5fb23d7aafc2"}, + {file = "multidict-6.0.4.tar.gz", hash = "sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49"}, ] [[package]] name = "nbclassic" -version = "0.4.8" -description = "A web-based notebook environment for interactive computing" -category = "dev" +version = "1.0.0" +description = "Jupyter Notebook as a Jupyter Server extension." optional = false python-versions = ">=3.7" files = [ - {file = "nbclassic-0.4.8-py3-none-any.whl", hash = "sha256:cbf05df5842b420d5cece0143462380ea9d308ff57c2dc0eb4d6e035b18fbfb3"}, - {file = "nbclassic-0.4.8.tar.gz", hash = "sha256:c74d8a500f8e058d46b576a41e5bc640711e1032cf7541dde5f73ea49497e283"}, + {file = "nbclassic-1.0.0-py3-none-any.whl", hash = "sha256:f99e4769b4750076cd4235c044b61232110733322384a94a63791d2e7beacc66"}, + {file = "nbclassic-1.0.0.tar.gz", hash = "sha256:0ae11eb2319455d805596bf320336cda9554b41d99ab9a3c31bf8180bffa30e3"}, ] [package.dependencies] @@ -1079,7 +1352,7 @@ jupyter-server = ">=1.8" nbconvert = ">=5" nbformat = "*" nest-asyncio = ">=1.5" -notebook-shim = ">=0.1.0" +notebook-shim = ">=0.2.3" prometheus-client = "*" pyzmq = ">=17" Send2Trash = ">=1.8.0" @@ -1090,60 +1363,57 @@ traitlets = ">=4.2.1" [package.extras] docs = ["myst-parser", "nbsphinx", "sphinx", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] json-logging = ["json-logging"] -test = ["coverage", "nbval", "pytest", "pytest-cov", "pytest-playwright", "pytest-tornasync", "requests", "requests-unixsocket", "testpath"] +test = ["coverage", "nbval", "pytest", "pytest-cov", "pytest-jupyter", "pytest-playwright", "pytest-tornasync", "requests", "requests-unixsocket", "testpath"] [[package]] name = "nbclient" -version = "0.7.2" +version = "0.8.0" description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." -category = "dev" optional = false -python-versions = ">=3.7.0" +python-versions = ">=3.8.0" files = [ - {file = "nbclient-0.7.2-py3-none-any.whl", hash = "sha256:d97ac6257de2794f5397609df754fcbca1a603e94e924eb9b99787c031ae2e7c"}, - {file = "nbclient-0.7.2.tar.gz", hash = "sha256:884a3f4a8c4fc24bb9302f263e0af47d97f0d01fe11ba714171b320c8ac09547"}, + {file = "nbclient-0.8.0-py3-none-any.whl", hash = "sha256:25e861299e5303a0477568557c4045eccc7a34c17fc08e7959558707b9ebe548"}, + {file = "nbclient-0.8.0.tar.gz", hash = "sha256:f9b179cd4b2d7bca965f900a2ebf0db4a12ebff2f36a711cb66861e4ae158e55"}, ] [package.dependencies] jupyter-client = ">=6.1.12" -jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" nbformat = ">=5.1" -traitlets = ">=5.3" +traitlets = ">=5.4" [package.extras] dev = ["pre-commit"] -docs = ["autodoc-traits", "mock", "moto", "myst-parser", "nbclient[test]", "sphinx (>=1.7)", "sphinx-book-theme"] -test = ["ipykernel", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] +docs = ["autodoc-traits", "mock", "moto", "myst-parser", "nbclient[test]", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling"] +test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] [[package]] name = "nbconvert" -version = "7.2.8" +version = "7.9.2" description = "Converting Jupyter Notebooks" -category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "nbconvert-7.2.8-py3-none-any.whl", hash = "sha256:ac57f2812175441a883f50c8ff113133ca65fe7ae5a9f1e3da3bfd1a70dce2ee"}, - {file = "nbconvert-7.2.8.tar.gz", hash = "sha256:ccedacde57a972836bfb46466485be29ed1364ed7c2f379f62bad47d340ece99"}, + {file = "nbconvert-7.9.2-py3-none-any.whl", hash = "sha256:39fe4b8bdd1b0104fdd86fc8a43a9077ba64c720bda4c6132690d917a0a154ee"}, + {file = "nbconvert-7.9.2.tar.gz", hash = "sha256:e56cc7588acc4f93e2bb5a34ec69028e4941797b2bfaf6462f18a41d1cc258c9"}, ] [package.dependencies] beautifulsoup4 = "*" -bleach = "*" +bleach = "!=5.0.0" defusedxml = "*" -importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} jinja2 = ">=3.0" jupyter-core = ">=4.7" jupyterlab-pygments = "*" markupsafe = ">=2.0" -mistune = ">=2.0.3,<3" +mistune = ">=2.0.3,<4" nbclient = ">=0.5.0" -nbformat = ">=5.1" +nbformat = ">=5.7" packaging = "*" pandocfilters = ">=1.4.1" pygments = ">=2.4.1" tinycss2 = "*" -traitlets = ">=5.0" +traitlets = ">=5.1" [package.extras] all = ["nbconvert[docs,qtpdf,serve,test,webpdf]"] @@ -1151,19 +1421,18 @@ docs = ["ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sp qtpdf = ["nbconvert[qtpng]"] qtpng = ["pyqtwebengine (>=5.15)"] serve = ["tornado (>=6.1)"] -test = ["ipykernel", "ipywidgets (>=7)", "pre-commit", "pytest", "pytest-dependency"] -webpdf = ["pyppeteer (>=1,<1.1)"] +test = ["flaky", "ipykernel", "ipywidgets (>=7)", "pytest", "pytest-dependency"] +webpdf = ["playwright"] [[package]] name = "nbformat" -version = "5.7.3" +version = "5.9.2" description = "The Jupyter Notebook format" -category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "nbformat-5.7.3-py3-none-any.whl", hash = "sha256:22a98a6516ca216002b0a34591af5bcb8072ca6c63910baffc901cfa07fefbf0"}, - {file = "nbformat-5.7.3.tar.gz", hash = "sha256:4b021fca24d3a747bf4e626694033d792d594705829e5e35b14ee3369f9f6477"}, + {file = "nbformat-5.9.2-py3-none-any.whl", hash = "sha256:1c5172d786a41b82bcfd0c23f9e6b6f072e8fb49c39250219e4acfff1efe89e9"}, + {file = "nbformat-5.9.2.tar.gz", hash = "sha256:5f98b5ba1997dff175e77e0c17d5c10a96eaed2cbd1de3533d1fc35d5e111192"}, ] [package.dependencies] @@ -1178,26 +1447,24 @@ test = ["pep440", "pre-commit", "pytest", "testpath"] [[package]] name = "nest-asyncio" -version = "1.5.6" +version = "1.5.8" description = "Patch asyncio to allow nested event loops" -category = "dev" optional = false python-versions = ">=3.5" files = [ - {file = "nest_asyncio-1.5.6-py3-none-any.whl", hash = "sha256:b9a953fb40dceaa587d109609098db21900182b16440652454a146cffb06e8b8"}, - {file = "nest_asyncio-1.5.6.tar.gz", hash = "sha256:d267cc1ff794403f7df692964d1d2a3fa9418ffea2a3f6859a439ff482fef290"}, + {file = "nest_asyncio-1.5.8-py3-none-any.whl", hash = "sha256:accda7a339a70599cb08f9dd09a67e0c2ef8d8d6f4c07f96ab203f2ae254e48d"}, + {file = "nest_asyncio-1.5.8.tar.gz", hash = "sha256:25aa2ca0d2a5b5531956b9e273b45cf664cae2b145101d73b86b199978d48fdb"}, ] [[package]] name = "notebook" -version = "6.5.2" +version = "6.5.6" description = "A web-based notebook environment for interactive computing" -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "notebook-6.5.2-py3-none-any.whl", hash = "sha256:e04f9018ceb86e4fa841e92ea8fb214f8d23c1cedfde530cc96f92446924f0e4"}, - {file = "notebook-6.5.2.tar.gz", hash = "sha256:c1897e5317e225fc78b45549a6ab4b668e4c996fd03a04e938fe5e7af2bfffd0"}, + {file = "notebook-6.5.6-py3-none-any.whl", hash = "sha256:c1e2eb2e3b6079a0552a04974883a48d04c3c05792170d64a4b23d707d453181"}, + {file = "notebook-6.5.6.tar.gz", hash = "sha256:b4625a4b7a597839dd3156b140d5ba2c7123761f98245a3290f67a8b8ee048d9"}, ] [package.dependencies] @@ -1205,14 +1472,14 @@ argon2-cffi = "*" ipykernel = "*" ipython-genutils = "*" jinja2 = "*" -jupyter-client = ">=5.3.4" +jupyter-client = ">=5.3.4,<8" jupyter-core = ">=4.6.1" nbclassic = ">=0.4.7" nbconvert = ">=5" nbformat = "*" nest-asyncio = ">=1.5" prometheus-client = "*" -pyzmq = ">=17" +pyzmq = ">=17,<25" Send2Trash = ">=1.8.0" terminado = ">=0.8.3" tornado = ">=6.1" @@ -1225,39 +1492,88 @@ test = ["coverage", "nbval", "pytest", "pytest-cov", "requests", "requests-unixs [[package]] name = "notebook-shim" -version = "0.2.2" +version = "0.2.3" description = "A shim layer for notebook traits and config" -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "notebook_shim-0.2.2-py3-none-any.whl", hash = "sha256:9c6c30f74c4fbea6fce55c1be58e7fd0409b1c681b075dcedceb005db5026949"}, - {file = "notebook_shim-0.2.2.tar.gz", hash = "sha256:090e0baf9a5582ff59b607af523ca2db68ff216da0c69956b62cab2ef4fc9c3f"}, + {file = "notebook_shim-0.2.3-py3-none-any.whl", hash = "sha256:a83496a43341c1674b093bfcebf0fe8e74cbe7eda5fd2bbc56f8e39e1486c0c7"}, + {file = "notebook_shim-0.2.3.tar.gz", hash = "sha256:f69388ac283ae008cd506dda10d0288b09a017d822d5e8c7129a152cbd3ce7e9"}, ] [package.dependencies] jupyter-server = ">=1.8,<3" [package.extras] -test = ["pytest", "pytest-console-scripts", "pytest-tornasync"] +test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync"] + +[[package]] +name = "openai" +version = "0.28.1" +description = "Python client library for the OpenAI API" +optional = false +python-versions = ">=3.7.1" +files = [ + {file = "openai-0.28.1-py3-none-any.whl", hash = "sha256:d18690f9e3d31eedb66b57b88c2165d760b24ea0a01f150dd3f068155088ce68"}, + {file = "openai-0.28.1.tar.gz", hash = "sha256:4be1dad329a65b4ce1a660fe6d5431b438f429b5855c883435f0f7fcb6d2dcc8"}, +] + +[package.dependencies] +aiohttp = "*" +requests = ">=2.20" +tqdm = "*" + +[package.extras] +datalib = ["numpy", "openpyxl (>=3.0.7)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"] +dev = ["black (>=21.6b0,<22.0)", "pytest (==6.*)", "pytest-asyncio", "pytest-mock"] +embeddings = ["matplotlib", "numpy", "openpyxl (>=3.0.7)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)", "plotly", "scikit-learn (>=1.0.2)", "scipy", "tenacity (>=8.0.1)"] +wandb = ["numpy", "openpyxl (>=3.0.7)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)", "wandb"] + +[[package]] +name = "openchallenges-client" +version = "1.0.0" +description = "OpenChallenges REST API" +optional = false +python-versions = "^3.7" +files = [] +develop = false + +[package.dependencies] +aenum = ">=3.1.11" +pydantic = "^1.10.5, <2" +python-dateutil = ">=2.8.2" +urllib3 = ">= 1.25.3" + +[package.source] +type = "directory" +url = "../../../libs/openchallenges/api-client-python" + +[[package]] +name = "overrides" +version = "7.4.0" +description = "A decorator to automatically detect mismatch when overriding a method." +optional = false +python-versions = ">=3.6" +files = [ + {file = "overrides-7.4.0-py3-none-any.whl", hash = "sha256:3ad24583f86d6d7a49049695efe9933e67ba62f0c7625d53c59fa832ce4b8b7d"}, + {file = "overrides-7.4.0.tar.gz", hash = "sha256:9502a3cca51f4fac40b5feca985b6703a5c1f6ad815588a7ca9e285b9dca6757"}, +] [[package]] name = "packaging" -version = "23.0" +version = "23.2" description = "Core utilities for Python packages" -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "packaging-23.0-py3-none-any.whl", hash = "sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2"}, - {file = "packaging-23.0.tar.gz", hash = "sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97"}, + {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, + {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, ] [[package]] name = "pandocfilters" version = "1.5.0" description = "Utilities for writing pandoc filters in python" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -1269,7 +1585,6 @@ files = [ name = "parso" version = "0.8.3" description = "A Python Parser" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -1285,7 +1600,6 @@ testing = ["docopt", "pytest (<6.0.0)"] name = "pexpect" version = "4.8.0" description = "Pexpect allows easy control of interactive console applications." -category = "dev" optional = false python-versions = "*" files = [ @@ -1300,7 +1614,6 @@ ptyprocess = ">=0.5" name = "pickleshare" version = "0.7.5" description = "Tiny 'shelve'-like database with concurrency support" -category = "dev" optional = false python-versions = "*" files = [ @@ -1310,30 +1623,28 @@ files = [ [[package]] name = "platformdirs" -version = "2.6.2" +version = "3.11.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "platformdirs-2.6.2-py3-none-any.whl", hash = "sha256:83c8f6d04389165de7c9b6f0c682439697887bca0aa2f1c87ef1826be3584490"}, - {file = "platformdirs-2.6.2.tar.gz", hash = "sha256:e1fea1fe471b9ff8332e229df3cb7de4f53eeea4998d3b6bfff542115e998bd2"}, + {file = "platformdirs-3.11.0-py3-none-any.whl", hash = "sha256:e9d171d00af68be50e9202731309c4e658fd8bc76f55c11c7dd760d023bda68e"}, + {file = "platformdirs-3.11.0.tar.gz", hash = "sha256:cf8ee52a3afdb965072dcc652433e0c7e3e40cf5ea1477cd4b3b1d2eb75495b3"}, ] [package.extras] -docs = ["furo (>=2022.12.7)", "proselint (>=0.13)", "sphinx (>=5.3)", "sphinx-autodoc-typehints (>=1.19.5)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.2.2)", "pytest (>=7.2)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] [[package]] name = "prometheus-client" -version = "0.15.0" +version = "0.17.1" description = "Python client for the Prometheus monitoring system." -category = "dev" optional = false python-versions = ">=3.6" files = [ - {file = "prometheus_client-0.15.0-py3-none-any.whl", hash = "sha256:db7c05cbd13a0f79975592d112320f2605a325969b270a94b71dcabc47b931d2"}, - {file = "prometheus_client-0.15.0.tar.gz", hash = "sha256:be26aa452490cfcf6da953f9436e95a9f2b4d578ca80094b4458930e5f584ab1"}, + {file = "prometheus_client-0.17.1-py3-none-any.whl", hash = "sha256:e537f37160f6807b8202a6fc4764cdd19bac5480ddd3e0d463c3002b34462101"}, + {file = "prometheus_client-0.17.1.tar.gz", hash = "sha256:21e674f39831ae3f8acde238afd9a27a37d0d2fb5a28ea094f0ce25d2cbf2091"}, ] [package.extras] @@ -1341,14 +1652,13 @@ twisted = ["twisted"] [[package]] name = "prompt-toolkit" -version = "3.0.36" +version = "3.0.39" description = "Library for building powerful interactive command lines in Python" -category = "dev" optional = false -python-versions = ">=3.6.2" +python-versions = ">=3.7.0" files = [ - {file = "prompt_toolkit-3.0.36-py3-none-any.whl", hash = "sha256:aa64ad242a462c5ff0363a7b9cfe696c20d55d9fc60c11fd8e632d064804d305"}, - {file = "prompt_toolkit-3.0.36.tar.gz", hash = "sha256:3e163f254bef5a03b146397d7c1963bd3e2812f0964bb9a24e6ec761fd28db63"}, + {file = "prompt_toolkit-3.0.39-py3-none-any.whl", hash = "sha256:9dffbe1d8acf91e3de75f3b544e4842382fc06c6babe903ac9acb74dc6e08d88"}, + {file = "prompt_toolkit-3.0.39.tar.gz", hash = "sha256:04505ade687dc26dc4284b1ad19a83be2f2afe83e7a828ace0c72f3a1df72aac"}, ] [package.dependencies] @@ -1356,26 +1666,27 @@ wcwidth = "*" [[package]] name = "psutil" -version = "5.9.4" +version = "5.9.6" description = "Cross-platform lib for process and system monitoring in Python." -category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ - {file = "psutil-5.9.4-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:c1ca331af862803a42677c120aff8a814a804e09832f166f226bfd22b56feee8"}, - {file = "psutil-5.9.4-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:68908971daf802203f3d37e78d3f8831b6d1014864d7a85937941bb35f09aefe"}, - {file = "psutil-5.9.4-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:3ff89f9b835100a825b14c2808a106b6fdcc4b15483141482a12c725e7f78549"}, - {file = "psutil-5.9.4-cp27-cp27m-win32.whl", hash = "sha256:852dd5d9f8a47169fe62fd4a971aa07859476c2ba22c2254d4a1baa4e10b95ad"}, - {file = "psutil-5.9.4-cp27-cp27m-win_amd64.whl", hash = "sha256:9120cd39dca5c5e1c54b59a41d205023d436799b1c8c4d3ff71af18535728e94"}, - {file = "psutil-5.9.4-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:6b92c532979bafc2df23ddc785ed116fced1f492ad90a6830cf24f4d1ea27d24"}, - {file = "psutil-5.9.4-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:efeae04f9516907be44904cc7ce08defb6b665128992a56957abc9b61dca94b7"}, - {file = "psutil-5.9.4-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:54d5b184728298f2ca8567bf83c422b706200bcbbfafdc06718264f9393cfeb7"}, - {file = "psutil-5.9.4-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:16653106f3b59386ffe10e0bad3bb6299e169d5327d3f187614b1cb8f24cf2e1"}, - {file = "psutil-5.9.4-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54c0d3d8e0078b7666984e11b12b88af2db11d11249a8ac8920dd5ef68a66e08"}, - {file = "psutil-5.9.4-cp36-abi3-win32.whl", hash = "sha256:149555f59a69b33f056ba1c4eb22bb7bf24332ce631c44a319cec09f876aaeff"}, - {file = "psutil-5.9.4-cp36-abi3-win_amd64.whl", hash = "sha256:fd8522436a6ada7b4aad6638662966de0d61d241cb821239b2ae7013d41a43d4"}, - {file = "psutil-5.9.4-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:6001c809253a29599bc0dfd5179d9f8a5779f9dffea1da0f13c53ee568115e1e"}, - {file = "psutil-5.9.4.tar.gz", hash = "sha256:3d7f9739eb435d4b1338944abe23f49584bde5395f27487d2ee25ad9a8774a62"}, + {file = "psutil-5.9.6-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:fb8a697f11b0f5994550555fcfe3e69799e5b060c8ecf9e2f75c69302cc35c0d"}, + {file = "psutil-5.9.6-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:91ecd2d9c00db9817a4b4192107cf6954addb5d9d67a969a4f436dbc9200f88c"}, + {file = "psutil-5.9.6-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:10e8c17b4f898d64b121149afb136c53ea8b68c7531155147867b7b1ac9e7e28"}, + {file = "psutil-5.9.6-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:18cd22c5db486f33998f37e2bb054cc62fd06646995285e02a51b1e08da97017"}, + {file = "psutil-5.9.6-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:ca2780f5e038379e520281e4c032dddd086906ddff9ef0d1b9dcf00710e5071c"}, + {file = "psutil-5.9.6-cp27-none-win32.whl", hash = "sha256:70cb3beb98bc3fd5ac9ac617a327af7e7f826373ee64c80efd4eb2856e5051e9"}, + {file = "psutil-5.9.6-cp27-none-win_amd64.whl", hash = "sha256:51dc3d54607c73148f63732c727856f5febec1c7c336f8f41fcbd6315cce76ac"}, + {file = "psutil-5.9.6-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:c69596f9fc2f8acd574a12d5f8b7b1ba3765a641ea5d60fb4736bf3c08a8214a"}, + {file = "psutil-5.9.6-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:92e0cc43c524834af53e9d3369245e6cc3b130e78e26100d1f63cdb0abeb3d3c"}, + {file = "psutil-5.9.6-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:748c9dd2583ed86347ed65d0035f45fa8c851e8d90354c122ab72319b5f366f4"}, + {file = "psutil-5.9.6-cp36-cp36m-win32.whl", hash = "sha256:3ebf2158c16cc69db777e3c7decb3c0f43a7af94a60d72e87b2823aebac3d602"}, + {file = "psutil-5.9.6-cp36-cp36m-win_amd64.whl", hash = "sha256:ff18b8d1a784b810df0b0fff3bcb50ab941c3b8e2c8de5726f9c71c601c611aa"}, + {file = "psutil-5.9.6-cp37-abi3-win32.whl", hash = "sha256:a6f01f03bf1843280f4ad16f4bde26b817847b4c1a0db59bf6419807bc5ce05c"}, + {file = "psutil-5.9.6-cp37-abi3-win_amd64.whl", hash = "sha256:6e5fb8dc711a514da83098bc5234264e551ad980cec5f85dabf4d38ed6f15e9a"}, + {file = "psutil-5.9.6-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:daecbcbd29b289aac14ece28eca6a3e60aa361754cf6da3dfb20d4d32b6c7f57"}, + {file = "psutil-5.9.6.tar.gz", hash = "sha256:e4b92ddcd7dd4cdd3f900180ea1e104932c7bce234fb88976e2a3b296441225a"}, ] [package.extras] @@ -1385,7 +1696,6 @@ test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] name = "ptyprocess" version = "0.7.0" description = "Run a subprocess in a pseudo terminal" -category = "dev" optional = false python-versions = "*" files = [ @@ -1397,7 +1707,6 @@ files = [ name = "pure-eval" version = "0.2.2" description = "Safely evaluate AST nodes without side effects" -category = "dev" optional = false python-versions = "*" files = [ @@ -1408,11 +1717,21 @@ files = [ [package.extras] tests = ["pytest"] +[[package]] +name = "py" +version = "1.11.0" +description = "library with cross-python path, ini-parsing, io, code, log facilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, + {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, +] + [[package]] name = "pycparser" version = "2.21" description = "C parser in Python" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -1421,62 +1740,75 @@ files = [ ] [[package]] -name = "pygments" -version = "2.14.0" -description = "Pygments is a syntax highlighting package written in Python." -category = "dev" +name = "pydantic" +version = "1.10.13" +description = "Data validation and settings management using python type hints" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "Pygments-2.14.0-py3-none-any.whl", hash = "sha256:fa7bd7bd2771287c0de303af8bfdfc731f51bd2c6a47ab69d117138893b82717"}, - {file = "Pygments-2.14.0.tar.gz", hash = "sha256:b3ed06a9e8ac9a9aae5a6f5dbe78a8a58655d17b43b93c078f094ddc476ae297"}, + {file = "pydantic-1.10.13-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:efff03cc7a4f29d9009d1c96ceb1e7a70a65cfe86e89d34e4a5f2ab1e5693737"}, + {file = "pydantic-1.10.13-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3ecea2b9d80e5333303eeb77e180b90e95eea8f765d08c3d278cd56b00345d01"}, + {file = "pydantic-1.10.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1740068fd8e2ef6eb27a20e5651df000978edce6da6803c2bef0bc74540f9548"}, + {file = "pydantic-1.10.13-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84bafe2e60b5e78bc64a2941b4c071a4b7404c5c907f5f5a99b0139781e69ed8"}, + {file = "pydantic-1.10.13-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bc0898c12f8e9c97f6cd44c0ed70d55749eaf783716896960b4ecce2edfd2d69"}, + {file = "pydantic-1.10.13-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:654db58ae399fe6434e55325a2c3e959836bd17a6f6a0b6ca8107ea0571d2e17"}, + {file = "pydantic-1.10.13-cp310-cp310-win_amd64.whl", hash = "sha256:75ac15385a3534d887a99c713aa3da88a30fbd6204a5cd0dc4dab3d770b9bd2f"}, + {file = "pydantic-1.10.13-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c553f6a156deb868ba38a23cf0df886c63492e9257f60a79c0fd8e7173537653"}, + {file = "pydantic-1.10.13-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5e08865bc6464df8c7d61439ef4439829e3ab62ab1669cddea8dd00cd74b9ffe"}, + {file = "pydantic-1.10.13-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e31647d85a2013d926ce60b84f9dd5300d44535a9941fe825dc349ae1f760df9"}, + {file = "pydantic-1.10.13-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:210ce042e8f6f7c01168b2d84d4c9eb2b009fe7bf572c2266e235edf14bacd80"}, + {file = "pydantic-1.10.13-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:8ae5dd6b721459bfa30805f4c25880e0dd78fc5b5879f9f7a692196ddcb5a580"}, + {file = "pydantic-1.10.13-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f8e81fc5fb17dae698f52bdd1c4f18b6ca674d7068242b2aff075f588301bbb0"}, + {file = "pydantic-1.10.13-cp311-cp311-win_amd64.whl", hash = "sha256:61d9dce220447fb74f45e73d7ff3b530e25db30192ad8d425166d43c5deb6df0"}, + {file = "pydantic-1.10.13-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4b03e42ec20286f052490423682016fd80fda830d8e4119f8ab13ec7464c0132"}, + {file = "pydantic-1.10.13-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f59ef915cac80275245824e9d771ee939133be38215555e9dc90c6cb148aaeb5"}, + {file = "pydantic-1.10.13-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5a1f9f747851338933942db7af7b6ee8268568ef2ed86c4185c6ef4402e80ba8"}, + {file = "pydantic-1.10.13-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:97cce3ae7341f7620a0ba5ef6cf043975cd9d2b81f3aa5f4ea37928269bc1b87"}, + {file = "pydantic-1.10.13-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:854223752ba81e3abf663d685f105c64150873cc6f5d0c01d3e3220bcff7d36f"}, + {file = "pydantic-1.10.13-cp37-cp37m-win_amd64.whl", hash = "sha256:b97c1fac8c49be29486df85968682b0afa77e1b809aff74b83081cc115e52f33"}, + {file = "pydantic-1.10.13-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c958d053453a1c4b1c2062b05cd42d9d5c8eb67537b8d5a7e3c3032943ecd261"}, + {file = "pydantic-1.10.13-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4c5370a7edaac06daee3af1c8b1192e305bc102abcbf2a92374b5bc793818599"}, + {file = "pydantic-1.10.13-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d6f6e7305244bddb4414ba7094ce910560c907bdfa3501e9db1a7fd7eaea127"}, + {file = "pydantic-1.10.13-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d3a3c792a58e1622667a2837512099eac62490cdfd63bd407993aaf200a4cf1f"}, + {file = "pydantic-1.10.13-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c636925f38b8db208e09d344c7aa4f29a86bb9947495dd6b6d376ad10334fb78"}, + {file = "pydantic-1.10.13-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:678bcf5591b63cc917100dc50ab6caebe597ac67e8c9ccb75e698f66038ea953"}, + {file = "pydantic-1.10.13-cp38-cp38-win_amd64.whl", hash = "sha256:6cf25c1a65c27923a17b3da28a0bdb99f62ee04230c931d83e888012851f4e7f"}, + {file = "pydantic-1.10.13-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8ef467901d7a41fa0ca6db9ae3ec0021e3f657ce2c208e98cd511f3161c762c6"}, + {file = "pydantic-1.10.13-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:968ac42970f57b8344ee08837b62f6ee6f53c33f603547a55571c954a4225691"}, + {file = "pydantic-1.10.13-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9849f031cf8a2f0a928fe885e5a04b08006d6d41876b8bbd2fc68a18f9f2e3fd"}, + {file = "pydantic-1.10.13-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:56e3ff861c3b9c6857579de282ce8baabf443f42ffba355bf070770ed63e11e1"}, + {file = "pydantic-1.10.13-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f00790179497767aae6bcdc36355792c79e7bbb20b145ff449700eb076c5f96"}, + {file = "pydantic-1.10.13-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:75b297827b59bc229cac1a23a2f7a4ac0031068e5be0ce385be1462e7e17a35d"}, + {file = "pydantic-1.10.13-cp39-cp39-win_amd64.whl", hash = "sha256:e70ca129d2053fb8b728ee7d1af8e553a928d7e301a311094b8a0501adc8763d"}, + {file = "pydantic-1.10.13-py3-none-any.whl", hash = "sha256:b87326822e71bd5f313e7d3bfdc77ac3247035ac10b0c0618bd99dcf95b1e687"}, + {file = "pydantic-1.10.13.tar.gz", hash = "sha256:32c8b48dcd3b2ac4e78b0ba4af3a2c2eb6048cb75202f0ea7b34feb740efc340"}, ] +[package.dependencies] +typing-extensions = ">=4.2.0" + [package.extras] -plugins = ["importlib-metadata"] +dotenv = ["python-dotenv (>=0.10.4)"] +email = ["email-validator (>=1.0.3)"] [[package]] -name = "pyrsistent" -version = "0.19.3" -description = "Persistent/Functional/Immutable data structures" -category = "dev" +name = "pygments" +version = "2.16.1" +description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.7" files = [ - {file = "pyrsistent-0.19.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:20460ac0ea439a3e79caa1dbd560344b64ed75e85d8703943e0b66c2a6150e4a"}, - {file = "pyrsistent-0.19.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c18264cb84b5e68e7085a43723f9e4c1fd1d935ab240ce02c0324a8e01ccb64"}, - {file = "pyrsistent-0.19.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b774f9288dda8d425adb6544e5903f1fb6c273ab3128a355c6b972b7df39dcf"}, - {file = "pyrsistent-0.19.3-cp310-cp310-win32.whl", hash = "sha256:5a474fb80f5e0d6c9394d8db0fc19e90fa540b82ee52dba7d246a7791712f74a"}, - {file = "pyrsistent-0.19.3-cp310-cp310-win_amd64.whl", hash = "sha256:49c32f216c17148695ca0e02a5c521e28a4ee6c5089f97e34fe24163113722da"}, - {file = "pyrsistent-0.19.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f0774bf48631f3a20471dd7c5989657b639fd2d285b861237ea9e82c36a415a9"}, - {file = "pyrsistent-0.19.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ab2204234c0ecd8b9368dbd6a53e83c3d4f3cab10ecaf6d0e772f456c442393"}, - {file = "pyrsistent-0.19.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e42296a09e83028b3476f7073fcb69ffebac0e66dbbfd1bd847d61f74db30f19"}, - {file = "pyrsistent-0.19.3-cp311-cp311-win32.whl", hash = "sha256:64220c429e42a7150f4bfd280f6f4bb2850f95956bde93c6fda1b70507af6ef3"}, - {file = "pyrsistent-0.19.3-cp311-cp311-win_amd64.whl", hash = "sha256:016ad1afadf318eb7911baa24b049909f7f3bb2c5b1ed7b6a8f21db21ea3faa8"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c4db1bd596fefd66b296a3d5d943c94f4fac5bcd13e99bffe2ba6a759d959a28"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aeda827381f5e5d65cced3024126529ddc4289d944f75e090572c77ceb19adbf"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:42ac0b2f44607eb92ae88609eda931a4f0dfa03038c44c772e07f43e738bcac9"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-win32.whl", hash = "sha256:e8f2b814a3dc6225964fa03d8582c6e0b6650d68a232df41e3cc1b66a5d2f8d1"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-win_amd64.whl", hash = "sha256:c9bb60a40a0ab9aba40a59f68214eed5a29c6274c83b2cc206a359c4a89fa41b"}, - {file = "pyrsistent-0.19.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a2471f3f8693101975b1ff85ffd19bb7ca7dd7c38f8a81701f67d6b4f97b87d8"}, - {file = "pyrsistent-0.19.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc5d149f31706762c1f8bda2e8c4f8fead6e80312e3692619a75301d3dbb819a"}, - {file = "pyrsistent-0.19.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3311cb4237a341aa52ab8448c27e3a9931e2ee09561ad150ba94e4cfd3fc888c"}, - {file = "pyrsistent-0.19.3-cp38-cp38-win32.whl", hash = "sha256:f0e7c4b2f77593871e918be000b96c8107da48444d57005b6a6bc61fb4331b2c"}, - {file = "pyrsistent-0.19.3-cp38-cp38-win_amd64.whl", hash = "sha256:c147257a92374fde8498491f53ffa8f4822cd70c0d85037e09028e478cababb7"}, - {file = "pyrsistent-0.19.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b735e538f74ec31378f5a1e3886a26d2ca6351106b4dfde376a26fc32a044edc"}, - {file = "pyrsistent-0.19.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99abb85579e2165bd8522f0c0138864da97847875ecbd45f3e7e2af569bfc6f2"}, - {file = "pyrsistent-0.19.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a8cb235fa6d3fd7aae6a4f1429bbb1fec1577d978098da1252f0489937786f3"}, - {file = "pyrsistent-0.19.3-cp39-cp39-win32.whl", hash = "sha256:c74bed51f9b41c48366a286395c67f4e894374306b197e62810e0fdaf2364da2"}, - {file = "pyrsistent-0.19.3-cp39-cp39-win_amd64.whl", hash = "sha256:878433581fc23e906d947a6814336eee031a00e6defba224234169ae3d3d6a98"}, - {file = "pyrsistent-0.19.3-py3-none-any.whl", hash = "sha256:ccf0d6bd208f8111179f0c26fdf84ed7c3891982f2edaeae7422575f47e66b64"}, - {file = "pyrsistent-0.19.3.tar.gz", hash = "sha256:1a2994773706bbb4995c31a97bc94f1418314923bd1048c6d964837040376440"}, + {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, + {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, ] +[package.extras] +plugins = ["importlib-metadata"] + [[package]] name = "python-dateutil" version = "2.8.2" description = "Extensions to the standard Python datetime module" -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ @@ -1487,28 +1819,40 @@ files = [ [package.dependencies] six = ">=1.5" +[[package]] +name = "python-dotenv" +version = "1.0.0" +description = "Read key-value pairs from a .env file and set them as environment variables" +optional = false +python-versions = ">=3.8" +files = [ + {file = "python-dotenv-1.0.0.tar.gz", hash = "sha256:a8df96034aae6d2d50a4ebe8216326c61c3eb64836776504fcca410e5937a3ba"}, + {file = "python_dotenv-1.0.0-py3-none-any.whl", hash = "sha256:f5971a9226b701070a4bf2c38c89e5a3f0d64de8debda981d1db98583009122a"}, +] + +[package.extras] +cli = ["click (>=5.0)"] + [[package]] name = "python-json-logger" -version = "2.0.4" +version = "2.0.7" description = "A python library adding a json log formatter" -category = "dev" optional = false -python-versions = ">=3.5" +python-versions = ">=3.6" files = [ - {file = "python-json-logger-2.0.4.tar.gz", hash = "sha256:764d762175f99fcc4630bd4853b09632acb60a6224acb27ce08cd70f0b1b81bd"}, - {file = "python_json_logger-2.0.4-py3-none-any.whl", hash = "sha256:3b03487b14eb9e4f77e4fc2a023358b5394b82fd89cecf5586259baed57d8c6f"}, + {file = "python-json-logger-2.0.7.tar.gz", hash = "sha256:23e7ec02d34237c5aa1e29a070193a4ea87583bb4e7f8fd06d3de8264c4b2e1c"}, + {file = "python_json_logger-2.0.7-py3-none-any.whl", hash = "sha256:f380b826a991ebbe3de4d897aeec42760035ac760345e57b812938dc8b35e2bd"}, ] [[package]] name = "python-slugify" -version = "7.0.0" +version = "8.0.1" description = "A Python slugify application that also handles Unicode" -category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "python-slugify-7.0.0.tar.gz", hash = "sha256:7a0f21a39fa6c1c4bf2e5984c9b9ae944483fd10b54804cb0e23a3ccd4954f0b"}, - {file = "python_slugify-7.0.0-py2.py3-none-any.whl", hash = "sha256:003aee64f9fd955d111549f96c4b58a3f40b9319383c70fad6277a4974bbf570"}, + {file = "python-slugify-8.0.1.tar.gz", hash = "sha256:ce0d46ddb668b3be82f4ed5e503dbc33dd815d83e2eb6824211310d3fb172a27"}, + {file = "python_slugify-8.0.1-py2.py3-none-any.whl", hash = "sha256:70ca6ea68fe63ecc8fa4fcf00ae651fc8a5d02d93dcd12ae6d4fc7ca46c4d395"}, ] [package.dependencies] @@ -1517,215 +1861,221 @@ text-unidecode = ">=1.3" [package.extras] unidecode = ["Unidecode (>=1.1.1)"] -[[package]] -name = "pytz" -version = "2022.7.1" -description = "World timezone definitions, modern and historical" -category = "dev" -optional = false -python-versions = "*" -files = [ - {file = "pytz-2022.7.1-py2.py3-none-any.whl", hash = "sha256:78f4f37d8198e0627c5f1143240bb0206b8691d8d7ac6d78fee88b78733f8c4a"}, - {file = "pytz-2022.7.1.tar.gz", hash = "sha256:01a0681c4b9684a28304615eba55d1ab31ae00bf68ec157ec3708a8182dbbcd0"}, -] - [[package]] name = "pywin32" -version = "305" +version = "306" description = "Python for Window Extensions" -category = "dev" optional = false python-versions = "*" files = [ - {file = "pywin32-305-cp310-cp310-win32.whl", hash = "sha256:421f6cd86e84bbb696d54563c48014b12a23ef95a14e0bdba526be756d89f116"}, - {file = "pywin32-305-cp310-cp310-win_amd64.whl", hash = "sha256:73e819c6bed89f44ff1d690498c0a811948f73777e5f97c494c152b850fad478"}, - {file = "pywin32-305-cp310-cp310-win_arm64.whl", hash = "sha256:742eb905ce2187133a29365b428e6c3b9001d79accdc30aa8969afba1d8470f4"}, - {file = "pywin32-305-cp311-cp311-win32.whl", hash = "sha256:19ca459cd2e66c0e2cc9a09d589f71d827f26d47fe4a9d09175f6aa0256b51c2"}, - {file = "pywin32-305-cp311-cp311-win_amd64.whl", hash = "sha256:326f42ab4cfff56e77e3e595aeaf6c216712bbdd91e464d167c6434b28d65990"}, - {file = "pywin32-305-cp311-cp311-win_arm64.whl", hash = "sha256:4ecd404b2c6eceaca52f8b2e3e91b2187850a1ad3f8b746d0796a98b4cea04db"}, - {file = "pywin32-305-cp36-cp36m-win32.whl", hash = "sha256:48d8b1659284f3c17b68587af047d110d8c44837736b8932c034091683e05863"}, - {file = "pywin32-305-cp36-cp36m-win_amd64.whl", hash = "sha256:13362cc5aa93c2beaf489c9c9017c793722aeb56d3e5166dadd5ef82da021fe1"}, - {file = "pywin32-305-cp37-cp37m-win32.whl", hash = "sha256:a55db448124d1c1484df22fa8bbcbc45c64da5e6eae74ab095b9ea62e6d00496"}, - {file = "pywin32-305-cp37-cp37m-win_amd64.whl", hash = "sha256:109f98980bfb27e78f4df8a51a8198e10b0f347257d1e265bb1a32993d0c973d"}, - {file = "pywin32-305-cp38-cp38-win32.whl", hash = "sha256:9dd98384da775afa009bc04863426cb30596fd78c6f8e4e2e5bbf4edf8029504"}, - {file = "pywin32-305-cp38-cp38-win_amd64.whl", hash = "sha256:56d7a9c6e1a6835f521788f53b5af7912090674bb84ef5611663ee1595860fc7"}, - {file = "pywin32-305-cp39-cp39-win32.whl", hash = "sha256:9d968c677ac4d5cbdaa62fd3014ab241718e619d8e36ef8e11fb930515a1e918"}, - {file = "pywin32-305-cp39-cp39-win_amd64.whl", hash = "sha256:50768c6b7c3f0b38b7fb14dd4104da93ebced5f1a50dc0e834594bff6fbe1271"}, + {file = "pywin32-306-cp310-cp310-win32.whl", hash = "sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d"}, + {file = "pywin32-306-cp310-cp310-win_amd64.whl", hash = "sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8"}, + {file = "pywin32-306-cp311-cp311-win32.whl", hash = "sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407"}, + {file = "pywin32-306-cp311-cp311-win_amd64.whl", hash = "sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e"}, + {file = "pywin32-306-cp311-cp311-win_arm64.whl", hash = "sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a"}, + {file = "pywin32-306-cp312-cp312-win32.whl", hash = "sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b"}, + {file = "pywin32-306-cp312-cp312-win_amd64.whl", hash = "sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e"}, + {file = "pywin32-306-cp312-cp312-win_arm64.whl", hash = "sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040"}, + {file = "pywin32-306-cp37-cp37m-win32.whl", hash = "sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65"}, + {file = "pywin32-306-cp37-cp37m-win_amd64.whl", hash = "sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36"}, + {file = "pywin32-306-cp38-cp38-win32.whl", hash = "sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a"}, + {file = "pywin32-306-cp38-cp38-win_amd64.whl", hash = "sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0"}, + {file = "pywin32-306-cp39-cp39-win32.whl", hash = "sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802"}, + {file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"}, ] [[package]] name = "pywinpty" -version = "2.0.10" +version = "2.0.12" description = "Pseudo terminal support for Windows from Python." -category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pywinpty-2.0.10-cp310-none-win_amd64.whl", hash = "sha256:4c7d06ad10f6e92bc850a467f26d98f4f30e73d2fe5926536308c6ae0566bc16"}, - {file = "pywinpty-2.0.10-cp311-none-win_amd64.whl", hash = "sha256:7ffbd66310b83e42028fc9df7746118978d94fba8c1ebf15a7c1275fdd80b28a"}, - {file = "pywinpty-2.0.10-cp37-none-win_amd64.whl", hash = "sha256:38cb924f2778b5751ef91a75febd114776b3af0ae411bc667be45dd84fc881d3"}, - {file = "pywinpty-2.0.10-cp38-none-win_amd64.whl", hash = "sha256:902d79444b29ad1833b8d5c3c9aabdfd428f4f068504430df18074007c8c0de8"}, - {file = "pywinpty-2.0.10-cp39-none-win_amd64.whl", hash = "sha256:3c46aef80dd50979aff93de199e4a00a8ee033ba7a03cadf0a91fed45f0c39d7"}, - {file = "pywinpty-2.0.10.tar.gz", hash = "sha256:cdbb5694cf8c7242c2ecfaca35c545d31fa5d5814c3d67a4e628f803f680ebea"}, + {file = "pywinpty-2.0.12-cp310-none-win_amd64.whl", hash = "sha256:21319cd1d7c8844fb2c970fb3a55a3db5543f112ff9cfcd623746b9c47501575"}, + {file = "pywinpty-2.0.12-cp311-none-win_amd64.whl", hash = "sha256:853985a8f48f4731a716653170cd735da36ffbdc79dcb4c7b7140bce11d8c722"}, + {file = "pywinpty-2.0.12-cp312-none-win_amd64.whl", hash = "sha256:1617b729999eb6713590e17665052b1a6ae0ad76ee31e60b444147c5b6a35dca"}, + {file = "pywinpty-2.0.12-cp38-none-win_amd64.whl", hash = "sha256:189380469ca143d06e19e19ff3fba0fcefe8b4a8cc942140a6b863aed7eebb2d"}, + {file = "pywinpty-2.0.12-cp39-none-win_amd64.whl", hash = "sha256:7520575b6546db23e693cbd865db2764097bd6d4ef5dc18c92555904cd62c3d4"}, + {file = "pywinpty-2.0.12.tar.gz", hash = "sha256:8197de460ae8ebb7f5d1701dfa1b5df45b157bb832e92acba316305e18ca00dd"}, ] [[package]] name = "pyyaml" -version = "6.0" +version = "6.0.1" description = "YAML parser and emitter for Python" -category = "dev" optional = false python-versions = ">=3.6" files = [ - {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, - {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, - {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, - {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"}, - {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"}, - {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"}, - {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, - {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, - {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, - {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, - {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, - {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, - {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, - {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, - {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, - {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, - {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, - {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, ] [[package]] name = "pyzmq" -version = "25.0.0" +version = "24.0.1" description = "Python bindings for 0MQ" -category = "dev" optional = false python-versions = ">=3.6" files = [ - {file = "pyzmq-25.0.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:2d05d904f03ddf1e0d83d97341354dfe52244a619b5a1440a5f47a5b3451e84e"}, - {file = "pyzmq-25.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a154ef810d44f9d28868be04641f837374a64e7449df98d9208e76c260c7ef1"}, - {file = "pyzmq-25.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:487305c2a011fdcf3db1f24e8814bb76d23bc4d2f46e145bc80316a59a9aa07d"}, - {file = "pyzmq-25.0.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e7b87638ee30ab13230e37ce5331b3e730b1e0dda30120b9eeec3540ed292c8"}, - {file = "pyzmq-25.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75243e422e85a62f0ab7953dc315452a56b2c6a7e7d1a3c3109ac3cc57ed6b47"}, - {file = "pyzmq-25.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:31e523d067ce44a04e876bed3ff9ea1ff8d1b6636d16e5fcace9d22f8c564369"}, - {file = "pyzmq-25.0.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8539216173135e9e89f6b1cc392e74e6b935b91e8c76106cf50e7a02ab02efe5"}, - {file = "pyzmq-25.0.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:2754fa68da08a854f4816e05160137fa938a2347276471103d31e04bcee5365c"}, - {file = "pyzmq-25.0.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4a1bc30f0c18444d51e9b0d0dd39e3a4e7c53ee74190bebef238cd58de577ea9"}, - {file = "pyzmq-25.0.0-cp310-cp310-win32.whl", hash = "sha256:01d53958c787cfea34091fcb8ef36003dbb7913b8e9f8f62a0715234ebc98b70"}, - {file = "pyzmq-25.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:58fc3ad5e1cfd2e6d24741fbb1e216b388115d31b0ca6670f894187f280b6ba6"}, - {file = "pyzmq-25.0.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:e4bba04ea779a3d7ef25a821bb63fd0939142c88e7813e5bd9c6265a20c523a2"}, - {file = "pyzmq-25.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:af1fbfb7ad6ac0009ccee33c90a1d303431c7fb594335eb97760988727a37577"}, - {file = "pyzmq-25.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85456f0d8f3268eecd63dede3b99d5bd8d3b306310c37d4c15141111d22baeaf"}, - {file = "pyzmq-25.0.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0645b5a2d2a06fd8eb738018490c514907f7488bf9359c6ee9d92f62e844b76f"}, - {file = "pyzmq-25.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f72ea279b2941a5203e935a4588b9ba8a48aeb9a926d9dfa1986278bd362cb8"}, - {file = "pyzmq-25.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:4e295f7928a31ae0f657e848c5045ba6d693fe8921205f408ca3804b1b236968"}, - {file = "pyzmq-25.0.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ac97e7d647d5519bcef48dd8d3d331f72975afa5c4496c95f6e854686f45e2d9"}, - {file = "pyzmq-25.0.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:656281d496aaf9ca4fd4cea84e6d893e3361057c4707bd38618f7e811759103c"}, - {file = "pyzmq-25.0.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1f6116991568aac48b94d6d8aaed6157d407942ea385335a6ed313692777fb9d"}, - {file = "pyzmq-25.0.0-cp311-cp311-win32.whl", hash = "sha256:0282bba9aee6e0346aa27d6c69b5f7df72b5a964c91958fc9e0c62dcae5fdcdc"}, - {file = "pyzmq-25.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:526f884a27e8bba62fe1f4e07c62be2cfe492b6d432a8fdc4210397f8cf15331"}, - {file = "pyzmq-25.0.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:ccb3e1a863222afdbda42b7ca8ac8569959593d7abd44f5a709177d6fa27d266"}, - {file = "pyzmq-25.0.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4046d03100aca266e70d54a35694cb35d6654cfbef633e848b3c4a8d64b9d187"}, - {file = "pyzmq-25.0.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3100dddcada66ec5940ed6391ebf9d003cc3ede3d320748b2737553019f58230"}, - {file = "pyzmq-25.0.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7877264aa851c19404b1bb9dbe6eed21ea0c13698be1eda3784aab3036d1c861"}, - {file = "pyzmq-25.0.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:5049e75cc99db65754a3da5f079230fb8889230cf09462ec972d884d1704a3ed"}, - {file = "pyzmq-25.0.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:81f99fb1224d36eb91557afec8cdc2264e856f3464500b55749020ce4c848ef2"}, - {file = "pyzmq-25.0.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:a1cd4a95f176cdc0ee0a82d49d5830f13ae6015d89decbf834c273bc33eeb3d3"}, - {file = "pyzmq-25.0.0-cp36-cp36m-win32.whl", hash = "sha256:926236ca003aec70574754f39703528947211a406f5c6c8b3e50eca04a9e87fc"}, - {file = "pyzmq-25.0.0-cp36-cp36m-win_amd64.whl", hash = "sha256:94f0a7289d0f5c80807c37ebb404205e7deb737e8763eb176f4770839ee2a287"}, - {file = "pyzmq-25.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f3f96d452e9580cb961ece2e5a788e64abaecb1232a80e61deffb28e105ff84a"}, - {file = "pyzmq-25.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:930e6ad4f2eaac31a3d0c2130619d25db754b267487ebc186c6ad18af2a74018"}, - {file = "pyzmq-25.0.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e1081d7030a1229c8ff90120346fb7599b54f552e98fcea5170544e7c6725aab"}, - {file = "pyzmq-25.0.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:531866c491aee5a1e967c286cfa470dffac1e2a203b1afda52d62b58782651e9"}, - {file = "pyzmq-25.0.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:fc7c1421c5b1c916acf3128bf3cc7ea7f5018b58c69a6866d70c14190e600ce9"}, - {file = "pyzmq-25.0.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:9a2d5e419bd39a1edb6cdd326d831f0120ddb9b1ff397e7d73541bf393294973"}, - {file = "pyzmq-25.0.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:183e18742be3621acf8908903f689ec520aee3f08449bfd29f583010ca33022b"}, - {file = "pyzmq-25.0.0-cp37-cp37m-win32.whl", hash = "sha256:02f5cb60a7da1edd5591a15efa654ffe2303297a41e1b40c3c8942f8f11fc17c"}, - {file = "pyzmq-25.0.0-cp37-cp37m-win_amd64.whl", hash = "sha256:cac602e02341eaaf4edfd3e29bd3fdef672e61d4e6dfe5c1d065172aee00acee"}, - {file = "pyzmq-25.0.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:e14df47c1265356715d3d66e90282a645ebc077b70b3806cf47efcb7d1d630cb"}, - {file = "pyzmq-25.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:293a7c2128690f496057f1f1eb6074f8746058d13588389981089ec45d8fdc77"}, - {file = "pyzmq-25.0.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:731b208bc9412deeb553c9519dca47136b5a01ca66667cafd8733211941b17e4"}, - {file = "pyzmq-25.0.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b055a1cddf8035966ad13aa51edae5dc8f1bba0b5d5e06f7a843d8b83dc9b66b"}, - {file = "pyzmq-25.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17e1cb97d573ea84d7cd97188b42ca6f611ab3ee600f6a75041294ede58e3d20"}, - {file = "pyzmq-25.0.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:60ecbfe7669d3808ffa8a7dd1487d6eb8a4015b07235e3b723d4b2a2d4de7203"}, - {file = "pyzmq-25.0.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4c25c95416133942280faaf068d0fddfd642b927fb28aaf4ab201a738e597c1e"}, - {file = "pyzmq-25.0.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:be05504af0619d1cffa500af1e0ede69fb683f301003851f5993b5247cc2c576"}, - {file = "pyzmq-25.0.0-cp38-cp38-win32.whl", hash = "sha256:6bf3842af37af43fa953e96074ebbb5315f6a297198f805d019d788a1021dbc8"}, - {file = "pyzmq-25.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:b90bb8dfbbd138558f1f284fecfe328f7653616ff9a972433a00711d9475d1a9"}, - {file = "pyzmq-25.0.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:62b9e80890c0d2408eb42d5d7e1fc62a5ce71be3288684788f74cf3e59ffd6e2"}, - {file = "pyzmq-25.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:484c2c4ee02c1edc07039f42130bd16e804b1fe81c4f428e0042e03967f40c20"}, - {file = "pyzmq-25.0.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9ca6db34b26c4d3e9b0728841ec9aa39484eee272caa97972ec8c8e231b20c7e"}, - {file = "pyzmq-25.0.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:610d2d112acd4e5501fac31010064a6c6efd716ceb968e443cae0059eb7b86de"}, - {file = "pyzmq-25.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3594c0ff604e685d7e907860b61d0e10e46c74a9ffca168f6e9e50ea934ee440"}, - {file = "pyzmq-25.0.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c21a5f4e54a807df5afdef52b6d24ec1580153a6bcf0607f70a6e1d9fa74c5c3"}, - {file = "pyzmq-25.0.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:4725412e27612f0d7d7c2f794d89807ad0227c2fc01dd6146b39ada49c748ef9"}, - {file = "pyzmq-25.0.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4d3d604fe0a67afd1aff906e54da557a5203368a99dcc50a70eef374f1d2abef"}, - {file = "pyzmq-25.0.0-cp39-cp39-win32.whl", hash = "sha256:3670e8c5644768f214a3b598fe46378a4a6f096d5fb82a67dfd3440028460565"}, - {file = "pyzmq-25.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:e99629a976809fe102ef73e856cf4b2660acd82a412a51e80ba2215e523dfd0a"}, - {file = "pyzmq-25.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:66509c48f7446b640eeae24b60c9c1461799a27b1b0754e438582e36b5af3315"}, - {file = "pyzmq-25.0.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a9c464cc508177c09a5a6122b67f978f20e2954a21362bf095a0da4647e3e908"}, - {file = "pyzmq-25.0.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:28bcb2e66224a7ac2843eb632e4109d6b161479e7a2baf24e37210461485b4f1"}, - {file = "pyzmq-25.0.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0e7ef9ac807db50b4eb6f534c5dcc22f998f5dae920cc28873d2c1d080a4fc9"}, - {file = "pyzmq-25.0.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:5050f5c50b58a6e38ccaf9263a356f74ef1040f5ca4030225d1cb1a858c5b7b6"}, - {file = "pyzmq-25.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2a73af6504e0d2805e926abf136ebf536735a13c22f709be7113c2ec65b4bec3"}, - {file = "pyzmq-25.0.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0e8d00228db627ddd1b418c7afd81820b38575f237128c9650365f2dd6ac3443"}, - {file = "pyzmq-25.0.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5605621f2181f20b71f13f698944deb26a0a71af4aaf435b34dd90146092d530"}, - {file = "pyzmq-25.0.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6136bfb0e5a9cf8c60c6ac763eb21f82940a77e6758ea53516c8c7074f4ff948"}, - {file = "pyzmq-25.0.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:0a90b2480a26aef7c13cff18703ba8d68e181facb40f78873df79e6d42c1facc"}, - {file = "pyzmq-25.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:00c94fd4c9dd3c95aace0c629a7fa713627a5c80c1819326b642adf6c4b8e2a2"}, - {file = "pyzmq-25.0.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20638121b0bdc80777ce0ec8c1f14f1ffec0697a1f88f0b564fa4a23078791c4"}, - {file = "pyzmq-25.0.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b6f75b4b8574f3a8a0d6b4b52606fc75b82cb4391471be48ab0b8677c82f9ed4"}, - {file = "pyzmq-25.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cbb885f347eba7ab7681c450dee5b14aed9f153eec224ec0c3f299273d9241f"}, - {file = "pyzmq-25.0.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c48f257da280b3be6c94e05bd575eddb1373419dbb1a72c3ce64e88f29d1cd6d"}, - {file = "pyzmq-25.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:866eabf7c1315ef2e93e34230db7cbf672e0d7c626b37c11f7e870c8612c3dcc"}, - {file = "pyzmq-25.0.0.tar.gz", hash = "sha256:f330a1a2c7f89fd4b0aa4dcb7bf50243bf1c8da9a2f1efc31daf57a2046b31f2"}, + {file = "pyzmq-24.0.1-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:28b119ba97129d3001673a697b7cce47fe6de1f7255d104c2f01108a5179a066"}, + {file = "pyzmq-24.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bcbebd369493d68162cddb74a9c1fcebd139dfbb7ddb23d8f8e43e6c87bac3a6"}, + {file = "pyzmq-24.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae61446166983c663cee42c852ed63899e43e484abf080089f771df4b9d272ef"}, + {file = "pyzmq-24.0.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:87f7ac99b15270db8d53f28c3c7b968612993a90a5cf359da354efe96f5372b4"}, + {file = "pyzmq-24.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9dca7c3956b03b7663fac4d150f5e6d4f6f38b2462c1e9afd83bcf7019f17913"}, + {file = "pyzmq-24.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8c78bfe20d4c890cb5580a3b9290f700c570e167d4cdcc55feec07030297a5e3"}, + {file = "pyzmq-24.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:48f721f070726cd2a6e44f3c33f8ee4b24188e4b816e6dd8ba542c8c3bb5b246"}, + {file = "pyzmq-24.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:afe1f3bc486d0ce40abb0a0c9adb39aed3bbac36ebdc596487b0cceba55c21c1"}, + {file = "pyzmq-24.0.1-cp310-cp310-win32.whl", hash = "sha256:3e6192dbcefaaa52ed81be88525a54a445f4b4fe2fffcae7fe40ebb58bd06bfd"}, + {file = "pyzmq-24.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:86de64468cad9c6d269f32a6390e210ca5ada568c7a55de8e681ca3b897bb340"}, + {file = "pyzmq-24.0.1-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:838812c65ed5f7c2bd11f7b098d2e5d01685a3f6d1f82849423b570bae698c00"}, + {file = "pyzmq-24.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dfb992dbcd88d8254471760879d48fb20836d91baa90f181c957122f9592b3dc"}, + {file = "pyzmq-24.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7abddb2bd5489d30ffeb4b93a428130886c171b4d355ccd226e83254fcb6b9ef"}, + {file = "pyzmq-24.0.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:94010bd61bc168c103a5b3b0f56ed3b616688192db7cd5b1d626e49f28ff51b3"}, + {file = "pyzmq-24.0.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:8242543c522d84d033fe79be04cb559b80d7eb98ad81b137ff7e0a9020f00ace"}, + {file = "pyzmq-24.0.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ccb94342d13e3bf3ffa6e62f95b5e3f0bc6bfa94558cb37f4b3d09d6feb536ff"}, + {file = "pyzmq-24.0.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6640f83df0ae4ae1104d4c62b77e9ef39be85ebe53f636388707d532bee2b7b8"}, + {file = "pyzmq-24.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a180dbd5ea5d47c2d3b716d5c19cc3fb162d1c8db93b21a1295d69585bfddac1"}, + {file = "pyzmq-24.0.1-cp311-cp311-win32.whl", hash = "sha256:624321120f7e60336be8ec74a172ae7fba5c3ed5bf787cc85f7e9986c9e0ebc2"}, + {file = "pyzmq-24.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:1724117bae69e091309ffb8255412c4651d3f6355560d9af312d547f6c5bc8b8"}, + {file = "pyzmq-24.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:15975747462ec49fdc863af906bab87c43b2491403ab37a6d88410635786b0f4"}, + {file = "pyzmq-24.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b947e264f0e77d30dcbccbb00f49f900b204b922eb0c3a9f0afd61aaa1cedc3d"}, + {file = "pyzmq-24.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0ec91f1bad66f3ee8c6deb65fa1fe418e8ad803efedd69c35f3b5502f43bd1dc"}, + {file = "pyzmq-24.0.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:db03704b3506455d86ec72c3358a779e9b1d07b61220dfb43702b7b668edcd0d"}, + {file = "pyzmq-24.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:e7e66b4e403c2836ac74f26c4b65d8ac0ca1eef41dfcac2d013b7482befaad83"}, + {file = "pyzmq-24.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:7a23ccc1083c260fa9685c93e3b170baba45aeed4b524deb3f426b0c40c11639"}, + {file = "pyzmq-24.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:fa0ae3275ef706c0309556061185dd0e4c4cd3b7d6f67ae617e4e677c7a41e2e"}, + {file = "pyzmq-24.0.1-cp36-cp36m-win32.whl", hash = "sha256:f01de4ec083daebf210531e2cca3bdb1608dbbbe00a9723e261d92087a1f6ebc"}, + {file = "pyzmq-24.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:de4217b9eb8b541cf2b7fde4401ce9d9a411cc0af85d410f9d6f4333f43640be"}, + {file = "pyzmq-24.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:78068e8678ca023594e4a0ab558905c1033b2d3e806a0ad9e3094e231e115a33"}, + {file = "pyzmq-24.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77c2713faf25a953c69cf0f723d1b7dd83827b0834e6c41e3fb3bbc6765914a1"}, + {file = "pyzmq-24.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8bb4af15f305056e95ca1bd086239b9ebc6ad55e9f49076d27d80027f72752f6"}, + {file = "pyzmq-24.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:0f14cffd32e9c4c73da66db97853a6aeceaac34acdc0fae9e5bbc9370281864c"}, + {file = "pyzmq-24.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0108358dab8c6b27ff6b985c2af4b12665c1bc659648284153ee501000f5c107"}, + {file = "pyzmq-24.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:d66689e840e75221b0b290b0befa86f059fb35e1ee6443bce51516d4d61b6b99"}, + {file = "pyzmq-24.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ae08ac90aa8fa14caafc7a6251bd218bf6dac518b7bff09caaa5e781119ba3f2"}, + {file = "pyzmq-24.0.1-cp37-cp37m-win32.whl", hash = "sha256:8421aa8c9b45ea608c205db9e1c0c855c7e54d0e9c2c2f337ce024f6843cab3b"}, + {file = "pyzmq-24.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:54d8b9c5e288362ec8595c1d98666d36f2070fd0c2f76e2b3c60fbad9bd76227"}, + {file = "pyzmq-24.0.1-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:acbd0a6d61cc954b9f535daaa9ec26b0a60a0d4353c5f7c1438ebc88a359a47e"}, + {file = "pyzmq-24.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:47b11a729d61a47df56346283a4a800fa379ae6a85870d5a2e1e4956c828eedc"}, + {file = "pyzmq-24.0.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:abe6eb10122f0d746a0d510c2039ae8edb27bc9af29f6d1b05a66cc2401353ff"}, + {file = "pyzmq-24.0.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:07bec1a1b22dacf718f2c0e71b49600bb6a31a88f06527dfd0b5aababe3fa3f7"}, + {file = "pyzmq-24.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0d945a85b70da97ae86113faf9f1b9294efe66bd4a5d6f82f2676d567338b66"}, + {file = "pyzmq-24.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:1b7928bb7580736ffac5baf814097be342ba08d3cfdfb48e52773ec959572287"}, + {file = "pyzmq-24.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b946da90dc2799bcafa682692c1d2139b2a96ec3c24fa9fc6f5b0da782675330"}, + {file = "pyzmq-24.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c8840f064b1fb377cffd3efeaad2b190c14d4c8da02316dae07571252d20b31f"}, + {file = "pyzmq-24.0.1-cp38-cp38-win32.whl", hash = "sha256:4854f9edc5208f63f0841c0c667260ae8d6846cfa233c479e29fdc85d42ebd58"}, + {file = "pyzmq-24.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:42d4f97b9795a7aafa152a36fe2ad44549b83a743fd3e77011136def512e6c2a"}, + {file = "pyzmq-24.0.1-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:52afb0ac962963fff30cf1be775bc51ae083ef4c1e354266ab20e5382057dd62"}, + {file = "pyzmq-24.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8bad8210ad4df68c44ff3685cca3cda448ee46e20d13edcff8909eba6ec01ca4"}, + {file = "pyzmq-24.0.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:dabf1a05318d95b1537fd61d9330ef4313ea1216eea128a17615038859da3b3b"}, + {file = "pyzmq-24.0.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5bd3d7dfd9cd058eb68d9a905dec854f86649f64d4ddf21f3ec289341386c44b"}, + {file = "pyzmq-24.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8012bce6836d3f20a6c9599f81dfa945f433dab4dbd0c4917a6fb1f998ab33d"}, + {file = "pyzmq-24.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c31805d2c8ade9b11feca4674eee2b9cce1fec3e8ddb7bbdd961a09dc76a80ea"}, + {file = "pyzmq-24.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:3104f4b084ad5d9c0cb87445cc8cfd96bba710bef4a66c2674910127044df209"}, + {file = "pyzmq-24.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:df0841f94928f8af9c7a1f0aaaffba1fb74607af023a152f59379c01c53aee58"}, + {file = "pyzmq-24.0.1-cp39-cp39-win32.whl", hash = "sha256:a435ef8a3bd95c8a2d316d6e0ff70d0db524f6037411652803e118871d703333"}, + {file = "pyzmq-24.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:2032d9cb994ce3b4cba2b8dfae08c7e25bc14ba484c770d4d3be33c27de8c45b"}, + {file = "pyzmq-24.0.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:bb5635c851eef3a7a54becde6da99485eecf7d068bd885ac8e6d173c4ecd68b0"}, + {file = "pyzmq-24.0.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:83ea1a398f192957cb986d9206ce229efe0ee75e3c6635baff53ddf39bd718d5"}, + {file = "pyzmq-24.0.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:941fab0073f0a54dc33d1a0460cb04e0d85893cb0c5e1476c785000f8b359409"}, + {file = "pyzmq-24.0.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e8f482c44ccb5884bf3f638f29bea0f8dc68c97e38b2061769c4cb697f6140d"}, + {file = "pyzmq-24.0.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:613010b5d17906c4367609e6f52e9a2595e35d5cc27d36ff3f1b6fa6e954d944"}, + {file = "pyzmq-24.0.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:65c94410b5a8355cfcf12fd600a313efee46ce96a09e911ea92cf2acf6708804"}, + {file = "pyzmq-24.0.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:20e7eeb1166087db636c06cae04a1ef59298627f56fb17da10528ab52a14c87f"}, + {file = "pyzmq-24.0.1-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a2712aee7b3834ace51738c15d9ee152cc5a98dc7d57dd93300461b792ab7b43"}, + {file = "pyzmq-24.0.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a7c280185c4da99e0cc06c63bdf91f5b0b71deb70d8717f0ab870a43e376db8"}, + {file = "pyzmq-24.0.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:858375573c9225cc8e5b49bfac846a77b696b8d5e815711b8d4ba3141e6e8879"}, + {file = "pyzmq-24.0.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:80093b595921eed1a2cead546a683b9e2ae7f4a4592bb2ab22f70d30174f003a"}, + {file = "pyzmq-24.0.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f3f3154fde2b1ff3aa7b4f9326347ebc89c8ef425ca1db8f665175e6d3bd42f"}, + {file = "pyzmq-24.0.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abb756147314430bee5d10919b8493c0ccb109ddb7f5dfd2fcd7441266a25b75"}, + {file = "pyzmq-24.0.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44e706bac34e9f50779cb8c39f10b53a4d15aebb97235643d3112ac20bd577b4"}, + {file = "pyzmq-24.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:687700f8371643916a1d2c61f3fdaa630407dd205c38afff936545d7b7466066"}, + {file = "pyzmq-24.0.1.tar.gz", hash = "sha256:216f5d7dbb67166759e59b0479bca82b8acf9bed6015b526b8eb10143fb08e77"}, ] [package.dependencies] cffi = {version = "*", markers = "implementation_name == \"pypy\""} +py = {version = "*", markers = "implementation_name == \"pypy\""} + +[[package]] +name = "referencing" +version = "0.30.2" +description = "JSON Referencing + Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "referencing-0.30.2-py3-none-any.whl", hash = "sha256:449b6669b6121a9e96a7f9e410b245d471e8d48964c67113ce9afe50c8dd7bdf"}, + {file = "referencing-0.30.2.tar.gz", hash = "sha256:794ad8003c65938edcdbc027f1933215e0d0ccc0291e3ce20a4d87432b59efc0"}, +] + +[package.dependencies] +attrs = ">=22.2.0" +rpds-py = ">=0.7.0" [[package]] name = "requests" -version = "2.28.2" +version = "2.31.0" description = "Python HTTP for Humans." -category = "main" optional = false -python-versions = ">=3.7, <4" +python-versions = ">=3.7" files = [ - {file = "requests-2.28.2-py3-none-any.whl", hash = "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa"}, - {file = "requests-2.28.2.tar.gz", hash = "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf"}, + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, ] [package.dependencies] certifi = ">=2017.4.17" charset-normalizer = ">=2,<4" idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<1.27" +urllib3 = ">=1.21.1,<3" [package.extras] socks = ["PySocks (>=1.5.6,!=1.5.7)"] @@ -1735,7 +2085,6 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] name = "rfc3339-validator" version = "0.1.4" description = "A pure python RFC3339 validator" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -1750,7 +2099,6 @@ six = "*" name = "rfc3986-validator" version = "0.1.1" description = "Pure python rfc3986 validator" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -1758,16 +2106,123 @@ files = [ {file = "rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055"}, ] +[[package]] +name = "rpds-py" +version = "0.10.6" +description = "Python bindings to Rust's persistent data structures (rpds)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "rpds_py-0.10.6-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:6bdc11f9623870d75692cc33c59804b5a18d7b8a4b79ef0b00b773a27397d1f6"}, + {file = "rpds_py-0.10.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:26857f0f44f0e791f4a266595a7a09d21f6b589580ee0585f330aaccccb836e3"}, + {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7f5e15c953ace2e8dde9824bdab4bec50adb91a5663df08d7d994240ae6fa31"}, + {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:61fa268da6e2e1cd350739bb61011121fa550aa2545762e3dc02ea177ee4de35"}, + {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c48f3fbc3e92c7dd6681a258d22f23adc2eb183c8cb1557d2fcc5a024e80b094"}, + {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0503c5b681566e8b722fe8c4c47cce5c7a51f6935d5c7012c4aefe952a35eed"}, + {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:734c41f9f57cc28658d98270d3436dba65bed0cfc730d115b290e970150c540d"}, + {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a5d7ed104d158c0042a6a73799cf0eb576dfd5fc1ace9c47996e52320c37cb7c"}, + {file = "rpds_py-0.10.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e3df0bc35e746cce42579826b89579d13fd27c3d5319a6afca9893a9b784ff1b"}, + {file = "rpds_py-0.10.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:73e0a78a9b843b8c2128028864901f55190401ba38aae685350cf69b98d9f7c9"}, + {file = "rpds_py-0.10.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5ed505ec6305abd2c2c9586a7b04fbd4baf42d4d684a9c12ec6110deefe2a063"}, + {file = "rpds_py-0.10.6-cp310-none-win32.whl", hash = "sha256:d97dd44683802000277bbf142fd9f6b271746b4846d0acaf0cefa6b2eaf2a7ad"}, + {file = "rpds_py-0.10.6-cp310-none-win_amd64.whl", hash = "sha256:b455492cab07107bfe8711e20cd920cc96003e0da3c1f91297235b1603d2aca7"}, + {file = "rpds_py-0.10.6-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:e8cdd52744f680346ff8c1ecdad5f4d11117e1724d4f4e1874f3a67598821069"}, + {file = "rpds_py-0.10.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:66414dafe4326bca200e165c2e789976cab2587ec71beb80f59f4796b786a238"}, + {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc435d059f926fdc5b05822b1be4ff2a3a040f3ae0a7bbbe672babb468944722"}, + {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8e7f2219cb72474571974d29a191714d822e58be1eb171f229732bc6fdedf0ac"}, + {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3953c6926a63f8ea5514644b7afb42659b505ece4183fdaaa8f61d978754349e"}, + {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2bb2e4826be25e72013916eecd3d30f66fd076110de09f0e750163b416500721"}, + {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bf347b495b197992efc81a7408e9a83b931b2f056728529956a4d0858608b80"}, + {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:102eac53bb0bf0f9a275b438e6cf6904904908562a1463a6fc3323cf47d7a532"}, + {file = "rpds_py-0.10.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:40f93086eef235623aa14dbddef1b9fb4b22b99454cb39a8d2e04c994fb9868c"}, + {file = "rpds_py-0.10.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e22260a4741a0e7a206e175232867b48a16e0401ef5bce3c67ca5b9705879066"}, + {file = "rpds_py-0.10.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f4e56860a5af16a0fcfa070a0a20c42fbb2012eed1eb5ceeddcc7f8079214281"}, + {file = "rpds_py-0.10.6-cp311-none-win32.whl", hash = "sha256:0774a46b38e70fdde0c6ded8d6d73115a7c39d7839a164cc833f170bbf539116"}, + {file = "rpds_py-0.10.6-cp311-none-win_amd64.whl", hash = "sha256:4a5ee600477b918ab345209eddafde9f91c0acd931f3776369585a1c55b04c57"}, + {file = "rpds_py-0.10.6-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:5ee97c683eaface61d38ec9a489e353d36444cdebb128a27fe486a291647aff6"}, + {file = "rpds_py-0.10.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0713631d6e2d6c316c2f7b9320a34f44abb644fc487b77161d1724d883662e31"}, + {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5a53f5998b4bbff1cb2e967e66ab2addc67326a274567697379dd1e326bded7"}, + {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6a555ae3d2e61118a9d3e549737bb4a56ff0cec88a22bd1dfcad5b4e04759175"}, + {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:945eb4b6bb8144909b203a88a35e0a03d22b57aefb06c9b26c6e16d72e5eb0f0"}, + {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:52c215eb46307c25f9fd2771cac8135d14b11a92ae48d17968eda5aa9aaf5071"}, + {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1b3cd23d905589cb205710b3988fc8f46d4a198cf12862887b09d7aaa6bf9b9"}, + {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:64ccc28683666672d7c166ed465c09cee36e306c156e787acef3c0c62f90da5a"}, + {file = "rpds_py-0.10.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:516a611a2de12fbea70c78271e558f725c660ce38e0006f75139ba337d56b1f6"}, + {file = "rpds_py-0.10.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9ff93d3aedef11f9c4540cf347f8bb135dd9323a2fc705633d83210d464c579d"}, + {file = "rpds_py-0.10.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d858532212f0650be12b6042ff4378dc2efbb7792a286bee4489eaa7ba010586"}, + {file = "rpds_py-0.10.6-cp312-none-win32.whl", hash = "sha256:3c4eff26eddac49d52697a98ea01b0246e44ca82ab09354e94aae8823e8bda02"}, + {file = "rpds_py-0.10.6-cp312-none-win_amd64.whl", hash = "sha256:150eec465dbc9cbca943c8e557a21afdcf9bab8aaabf386c44b794c2f94143d2"}, + {file = "rpds_py-0.10.6-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:cf693eb4a08eccc1a1b636e4392322582db2a47470d52e824b25eca7a3977b53"}, + {file = "rpds_py-0.10.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4134aa2342f9b2ab6c33d5c172e40f9ef802c61bb9ca30d21782f6e035ed0043"}, + {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e782379c2028a3611285a795b89b99a52722946d19fc06f002f8b53e3ea26ea9"}, + {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2f6da6d842195fddc1cd34c3da8a40f6e99e4a113918faa5e60bf132f917c247"}, + {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b4a9fe992887ac68256c930a2011255bae0bf5ec837475bc6f7edd7c8dfa254e"}, + {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b788276a3c114e9f51e257f2a6f544c32c02dab4aa7a5816b96444e3f9ffc336"}, + {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:caa1afc70a02645809c744eefb7d6ee8fef7e2fad170ffdeacca267fd2674f13"}, + {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bddd4f91eede9ca5275e70479ed3656e76c8cdaaa1b354e544cbcf94c6fc8ac4"}, + {file = "rpds_py-0.10.6-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:775049dfa63fb58293990fc59473e659fcafd953bba1d00fc5f0631a8fd61977"}, + {file = "rpds_py-0.10.6-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:c6c45a2d2b68c51fe3d9352733fe048291e483376c94f7723458cfd7b473136b"}, + {file = "rpds_py-0.10.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0699ab6b8c98df998c3eacf51a3b25864ca93dab157abe358af46dc95ecd9801"}, + {file = "rpds_py-0.10.6-cp38-none-win32.whl", hash = "sha256:ebdab79f42c5961682654b851f3f0fc68e6cc7cd8727c2ac4ffff955154123c1"}, + {file = "rpds_py-0.10.6-cp38-none-win_amd64.whl", hash = "sha256:24656dc36f866c33856baa3ab309da0b6a60f37d25d14be916bd3e79d9f3afcf"}, + {file = "rpds_py-0.10.6-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:0898173249141ee99ffcd45e3829abe7bcee47d941af7434ccbf97717df020e5"}, + {file = "rpds_py-0.10.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9e9184fa6c52a74a5521e3e87badbf9692549c0fcced47443585876fcc47e469"}, + {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5752b761902cd15073a527b51de76bbae63d938dc7c5c4ad1e7d8df10e765138"}, + {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:99a57006b4ec39dbfb3ed67e5b27192792ffb0553206a107e4aadb39c5004cd5"}, + {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09586f51a215d17efdb3a5f090d7cbf1633b7f3708f60a044757a5d48a83b393"}, + {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e225a6a14ecf44499aadea165299092ab0cba918bb9ccd9304eab1138844490b"}, + {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2039f8d545f20c4e52713eea51a275e62153ee96c8035a32b2abb772b6fc9e5"}, + {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:34ad87a831940521d462ac11f1774edf867c34172010f5390b2f06b85dcc6014"}, + {file = "rpds_py-0.10.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:dcdc88b6b01015da066da3fb76545e8bb9a6880a5ebf89e0f0b2e3ca557b3ab7"}, + {file = "rpds_py-0.10.6-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:25860ed5c4e7f5e10c496ea78af46ae8d8468e0be745bd233bab9ca99bfd2647"}, + {file = "rpds_py-0.10.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7854a207ef77319ec457c1eb79c361b48807d252d94348305db4f4b62f40f7f3"}, + {file = "rpds_py-0.10.6-cp39-none-win32.whl", hash = "sha256:e6fcc026a3f27c1282c7ed24b7fcac82cdd70a0e84cc848c0841a3ab1e3dea2d"}, + {file = "rpds_py-0.10.6-cp39-none-win_amd64.whl", hash = "sha256:e98c4c07ee4c4b3acf787e91b27688409d918212dfd34c872201273fdd5a0e18"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:68fe9199184c18d997d2e4293b34327c0009a78599ce703e15cd9a0f47349bba"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:3339eca941568ed52d9ad0f1b8eb9fe0958fa245381747cecf2e9a78a5539c42"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a360cfd0881d36c6dc271992ce1eda65dba5e9368575663de993eeb4523d895f"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:031f76fc87644a234883b51145e43985aa2d0c19b063e91d44379cd2786144f8"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f36a9d751f86455dc5278517e8b65580eeee37d61606183897f122c9e51cef3"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:052a832078943d2b2627aea0d19381f607fe331cc0eb5df01991268253af8417"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:023574366002bf1bd751ebaf3e580aef4a468b3d3c216d2f3f7e16fdabd885ed"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:defa2c0c68734f4a82028c26bcc85e6b92cced99866af118cd6a89b734ad8e0d"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:879fb24304ead6b62dbe5034e7b644b71def53c70e19363f3c3be2705c17a3b4"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:53c43e10d398e365da2d4cc0bcaf0854b79b4c50ee9689652cdc72948e86f487"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:3777cc9dea0e6c464e4b24760664bd8831738cc582c1d8aacf1c3f546bef3f65"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:40578a6469e5d1df71b006936ce95804edb5df47b520c69cf5af264d462f2cbb"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:cf71343646756a072b85f228d35b1d7407da1669a3de3cf47f8bbafe0c8183a4"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:10f32b53f424fc75ff7b713b2edb286fdbfc94bf16317890260a81c2c00385dc"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:81de24a1c51cfb32e1fbf018ab0bdbc79c04c035986526f76c33e3f9e0f3356c"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac17044876e64a8ea20ab132080ddc73b895b4abe9976e263b0e30ee5be7b9c2"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5e8a78bd4879bff82daef48c14d5d4057f6856149094848c3ed0ecaf49f5aec2"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78ca33811e1d95cac8c2e49cb86c0fb71f4d8409d8cbea0cb495b6dbddb30a55"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c63c3ef43f0b3fb00571cff6c3967cc261c0ebd14a0a134a12e83bdb8f49f21f"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:7fde6d0e00b2fd0dbbb40c0eeec463ef147819f23725eda58105ba9ca48744f4"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:79edd779cfc46b2e15b0830eecd8b4b93f1a96649bcb502453df471a54ce7977"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:9164ec8010327ab9af931d7ccd12ab8d8b5dc2f4c6a16cbdd9d087861eaaefa1"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:d29ddefeab1791e3c751e0189d5f4b3dbc0bbe033b06e9c333dca1f99e1d523e"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:30adb75ecd7c2a52f5e76af50644b3e0b5ba036321c390b8e7ec1bb2a16dd43c"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd609fafdcdde6e67a139898196698af37438b035b25ad63704fd9097d9a3482"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6eef672de005736a6efd565577101277db6057f65640a813de6c2707dc69f396"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6cf4393c7b41abbf07c88eb83e8af5013606b1cdb7f6bc96b1b3536b53a574b8"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ad857f42831e5b8d41a32437f88d86ead6c191455a3499c4b6d15e007936d4cf"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d7360573f1e046cb3b0dceeb8864025aa78d98be4bb69f067ec1c40a9e2d9df"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d08f63561c8a695afec4975fae445245386d645e3e446e6f260e81663bfd2e38"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:f0f17f2ce0f3529177a5fff5525204fad7b43dd437d017dd0317f2746773443d"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:442626328600bde1d09dc3bb00434f5374948838ce75c41a52152615689f9403"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:e9616f5bd2595f7f4a04b67039d890348ab826e943a9bfdbe4938d0eba606971"}, + {file = "rpds_py-0.10.6.tar.gz", hash = "sha256:4ce5a708d65a8dbf3748d2474b580d606b1b9f91b5c6ab2a316e0b0cf7a4ba50"}, +] + [[package]] name = "send2trash" -version = "1.8.0" -description = "Send file to trash natively under Mac OS X, Windows and Linux." -category = "dev" +version = "1.8.2" +description = "Send file to trash natively under Mac OS X, Windows and Linux" optional = false -python-versions = "*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" files = [ - {file = "Send2Trash-1.8.0-py3-none-any.whl", hash = "sha256:f20eaadfdb517eaca5ce077640cb261c7d2698385a6a0f072a4a5447fd49fa08"}, - {file = "Send2Trash-1.8.0.tar.gz", hash = "sha256:d2c24762fd3759860a0aff155e45871447ea58d2be6bdd39b5c8f966a0c99c2d"}, + {file = "Send2Trash-1.8.2-py3-none-any.whl", hash = "sha256:a384719d99c07ce1eefd6905d2decb6f8b7ed054025bb0e618919f945de4f679"}, + {file = "Send2Trash-1.8.2.tar.gz", hash = "sha256:c132d59fa44b9ca2b1699af5c86f57ce9f4c5eb56629d5d55fbb7a35f84e2312"}, ] [package.extras] @@ -1779,7 +2234,6 @@ win32 = ["pywin32"] name = "six" version = "1.16.0" description = "Python 2 and 3 compatibility utilities" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -1791,7 +2245,6 @@ files = [ name = "sniffio" version = "1.3.0" description = "Sniff out which async library your code is running under" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1801,26 +2254,24 @@ files = [ [[package]] name = "soupsieve" -version = "2.3.2.post1" +version = "2.5" description = "A modern CSS selector implementation for Beautiful Soup." -category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "soupsieve-2.3.2.post1-py3-none-any.whl", hash = "sha256:3b2503d3c7084a42b1ebd08116e5f81aadfaea95863628c80a3b774a11b7c759"}, - {file = "soupsieve-2.3.2.post1.tar.gz", hash = "sha256:fc53893b3da2c33de295667a0e19f078c14bf86544af307354de5fcf12a3f30d"}, + {file = "soupsieve-2.5-py3-none-any.whl", hash = "sha256:eaa337ff55a1579b6549dc679565eac1e3d000563bcb1c8ab0d0fefbc0c2cdc7"}, + {file = "soupsieve-2.5.tar.gz", hash = "sha256:5663d5a7b3bfaeee0bc4372e7fc48f9cff4940b3eec54a6451cc5299f1097690"}, ] [[package]] name = "stack-data" -version = "0.6.2" +version = "0.6.3" description = "Extract data from python stack frames and tracebacks for informative displays" -category = "dev" optional = false python-versions = "*" files = [ - {file = "stack_data-0.6.2-py3-none-any.whl", hash = "sha256:cbb2a53eb64e5785878201a97ed7c7b94883f48b87bfb0bbe8b623c74679e4a8"}, - {file = "stack_data-0.6.2.tar.gz", hash = "sha256:32d2dd0376772d01b6cb9fc996f3c8b57a357089dec328ed4b6553d037eaf815"}, + {file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"}, + {file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"}, ] [package.dependencies] @@ -1835,7 +2286,6 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] name = "terminado" version = "0.17.1" description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1856,7 +2306,6 @@ test = ["pre-commit", "pytest (>=7.0)", "pytest-timeout"] name = "text-unidecode" version = "1.3" description = "The most basic Text::Unidecode port" -category = "main" optional = false python-versions = "*" files = [ @@ -1868,7 +2317,6 @@ files = [ name = "tinycss2" version = "1.2.1" description = "A tiny CSS parser" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1887,7 +2335,6 @@ test = ["flake8", "isort", "pytest"] name = "tomli" version = "2.0.1" description = "A lil' TOML parser" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1897,123 +2344,142 @@ files = [ [[package]] name = "tornado" -version = "6.2" +version = "6.3.3" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." -category = "dev" optional = false -python-versions = ">= 3.7" +python-versions = ">= 3.8" files = [ - {file = "tornado-6.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:20f638fd8cc85f3cbae3c732326e96addff0a15e22d80f049e00121651e82e72"}, - {file = "tornado-6.2-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:87dcafae3e884462f90c90ecc200defe5e580a7fbbb4365eda7c7c1eb809ebc9"}, - {file = "tornado-6.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba09ef14ca9893954244fd872798b4ccb2367c165946ce2dd7376aebdde8e3ac"}, - {file = "tornado-6.2-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b8150f721c101abdef99073bf66d3903e292d851bee51910839831caba341a75"}, - {file = "tornado-6.2-cp37-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3a2f5999215a3a06a4fc218026cd84c61b8b2b40ac5296a6db1f1451ef04c1e"}, - {file = "tornado-6.2-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:5f8c52d219d4995388119af7ccaa0bcec289535747620116a58d830e7c25d8a8"}, - {file = "tornado-6.2-cp37-abi3-musllinux_1_1_i686.whl", hash = "sha256:6fdfabffd8dfcb6cf887428849d30cf19a3ea34c2c248461e1f7d718ad30b66b"}, - {file = "tornado-6.2-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:1d54d13ab8414ed44de07efecb97d4ef7c39f7438cf5e976ccd356bebb1b5fca"}, - {file = "tornado-6.2-cp37-abi3-win32.whl", hash = "sha256:5c87076709343557ef8032934ce5f637dbb552efa7b21d08e89ae7619ed0eb23"}, - {file = "tornado-6.2-cp37-abi3-win_amd64.whl", hash = "sha256:e5f923aa6a47e133d1cf87d60700889d7eae68988704e20c75fb2d65677a8e4b"}, - {file = "tornado-6.2.tar.gz", hash = "sha256:9b630419bde84ec666bfd7ea0a4cb2a8a651c2d5cccdbdd1972a0c859dfc3c13"}, + {file = "tornado-6.3.3-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:502fba735c84450974fec147340016ad928d29f1e91f49be168c0a4c18181e1d"}, + {file = "tornado-6.3.3-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:805d507b1f588320c26f7f097108eb4023bbaa984d63176d1652e184ba24270a"}, + {file = "tornado-6.3.3-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bd19ca6c16882e4d37368e0152f99c099bad93e0950ce55e71daed74045908f"}, + {file = "tornado-6.3.3-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ac51f42808cca9b3613f51ffe2a965c8525cb1b00b7b2d56828b8045354f76a"}, + {file = "tornado-6.3.3-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:71a8db65160a3c55d61839b7302a9a400074c9c753040455494e2af74e2501f2"}, + {file = "tornado-6.3.3-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:ceb917a50cd35882b57600709dd5421a418c29ddc852da8bcdab1f0db33406b0"}, + {file = "tornado-6.3.3-cp38-abi3-musllinux_1_1_i686.whl", hash = "sha256:7d01abc57ea0dbb51ddfed477dfe22719d376119844e33c661d873bf9c0e4a16"}, + {file = "tornado-6.3.3-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:9dc4444c0defcd3929d5c1eb5706cbe1b116e762ff3e0deca8b715d14bf6ec17"}, + {file = "tornado-6.3.3-cp38-abi3-win32.whl", hash = "sha256:65ceca9500383fbdf33a98c0087cb975b2ef3bfb874cb35b8de8740cf7f41bd3"}, + {file = "tornado-6.3.3-cp38-abi3-win_amd64.whl", hash = "sha256:22d3c2fa10b5793da13c807e6fc38ff49a4f6e1e3868b0a6f4164768bb8e20f5"}, + {file = "tornado-6.3.3.tar.gz", hash = "sha256:e7d8db41c0181c80d76c982aacc442c0783a2c54d6400fe028954201a2e032fe"}, ] [[package]] name = "tqdm" -version = "4.64.1" +version = "4.66.1" description = "Fast, Extensible Progress Meter" -category = "main" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" +python-versions = ">=3.7" files = [ - {file = "tqdm-4.64.1-py2.py3-none-any.whl", hash = "sha256:6fee160d6ffcd1b1c68c65f14c829c22832bc401726335ce92c52d395944a6a1"}, - {file = "tqdm-4.64.1.tar.gz", hash = "sha256:5f4f682a004951c1b450bc753c710e9280c5746ce6ffedee253ddbcbf54cf1e4"}, + {file = "tqdm-4.66.1-py3-none-any.whl", hash = "sha256:d302b3c5b53d47bce91fea46679d9c3c6508cf6332229aa1e7d8653723793386"}, + {file = "tqdm-4.66.1.tar.gz", hash = "sha256:d88e651f9db8d8551a62556d3cff9e3034274ca5d66e93197cf2490e2dcb69c7"}, ] [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} [package.extras] -dev = ["py-make (>=0.1.0)", "twine", "wheel"] +dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] notebook = ["ipywidgets (>=6)"] slack = ["slack-sdk"] telegram = ["requests"] [[package]] name = "traitlets" -version = "5.8.1" +version = "5.11.2" description = "Traitlets Python configuration system" -category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "traitlets-5.8.1-py3-none-any.whl", hash = "sha256:a1ca5df6414f8b5760f7c5f256e326ee21b581742114545b462b35ffe3f04861"}, - {file = "traitlets-5.8.1.tar.gz", hash = "sha256:32500888f5ff7bbf3b9267ea31748fa657aaf34d56d85e60f91dda7dc7f5785b"}, + {file = "traitlets-5.11.2-py3-none-any.whl", hash = "sha256:98277f247f18b2c5cabaf4af369187754f4fb0e85911d473f72329db8a7f4fae"}, + {file = "traitlets-5.11.2.tar.gz", hash = "sha256:7564b5bf8d38c40fa45498072bf4dc5e8346eb087bbf1e2ae2d8774f6a0f078e"}, ] [package.extras] docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] -test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"] +test = ["argcomplete (>=3.0.3)", "mypy (>=1.5.1)", "pre-commit", "pytest (>=7.0,<7.5)", "pytest-mock", "pytest-mypy-testing"] + +[[package]] +name = "types-python-dateutil" +version = "2.8.19.14" +description = "Typing stubs for python-dateutil" +optional = false +python-versions = "*" +files = [ + {file = "types-python-dateutil-2.8.19.14.tar.gz", hash = "sha256:1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b"}, + {file = "types_python_dateutil-2.8.19.14-py3-none-any.whl", hash = "sha256:f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9"}, +] + +[[package]] +name = "typing-extensions" +version = "4.8.0" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = false +python-versions = ">=3.8" +files = [ + {file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"}, + {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"}, +] [[package]] name = "uri-template" -version = "1.2.0" +version = "1.3.0" description = "RFC 6570 URI Template Processor" -category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "uri_template-1.2.0-py3-none-any.whl", hash = "sha256:f1699c77b73b925cf4937eae31ab282a86dc885c333f2e942513f08f691fc7db"}, - {file = "uri_template-1.2.0.tar.gz", hash = "sha256:934e4d09d108b70eb8a24410af8615294d09d279ce0e7cbcdaef1bd21f932b06"}, + {file = "uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7"}, + {file = "uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363"}, ] [package.extras] -dev = ["flake8 (<4.0.0)", "flake8-annotations", "flake8-bugbear", "flake8-commas", "flake8-comprehensions", "flake8-continuation", "flake8-datetimez", "flake8-docstrings", "flake8-import-order", "flake8-literal", "flake8-noqa", "flake8-requirements", "flake8-type-annotations", "flake8-use-fstring", "mypy", "pep8-naming"] +dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake8-commas", "flake8-comprehensions", "flake8-continuation", "flake8-datetimez", "flake8-docstrings", "flake8-import-order", "flake8-literal", "flake8-modern-annotations", "flake8-noqa", "flake8-pyproject", "flake8-requirements", "flake8-typechecking-import", "flake8-use-fstring", "mypy", "pep8-naming", "types-PyYAML"] [[package]] name = "urllib3" -version = "1.26.14" +version = "2.0.7" description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +python-versions = ">=3.7" files = [ - {file = "urllib3-1.26.14-py2.py3-none-any.whl", hash = "sha256:75edcdc2f7d85b137124a6c3c9fc3933cdeaa12ecb9a6a959f22797a0feca7e1"}, - {file = "urllib3-1.26.14.tar.gz", hash = "sha256:076907bf8fd355cde77728471316625a4d2f7e713c125f51953bb5b3eecf4f72"}, + {file = "urllib3-2.0.7-py3-none-any.whl", hash = "sha256:fdb6d215c776278489906c2f8916e6e7d4f5a9b602ccbcfdf7f016fc8da0596e"}, + {file = "urllib3-2.0.7.tar.gz", hash = "sha256:c97dfde1f7bd43a71c8d2a58e369e9b2bf692d1334ea9f9cae55add7d0dd0f84"}, ] [package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] -secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] -socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] [[package]] name = "wcwidth" -version = "0.2.6" +version = "0.2.8" description = "Measures the displayed width of unicode strings in a terminal" -category = "dev" optional = false python-versions = "*" files = [ - {file = "wcwidth-0.2.6-py2.py3-none-any.whl", hash = "sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e"}, - {file = "wcwidth-0.2.6.tar.gz", hash = "sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0"}, + {file = "wcwidth-0.2.8-py2.py3-none-any.whl", hash = "sha256:77f719e01648ed600dfa5402c347481c0992263b81a027344f3e1ba25493a704"}, + {file = "wcwidth-0.2.8.tar.gz", hash = "sha256:8705c569999ffbb4f6a87c6d1b80f324bd6db952f5eb0b95bc07517f4c1813d4"}, ] [[package]] name = "webcolors" -version = "1.12" -description = "A library for working with color names and color values formats defined by HTML and CSS." -category = "dev" +version = "1.13" +description = "A library for working with the color formats defined by HTML and CSS." optional = false python-versions = ">=3.7" files = [ - {file = "webcolors-1.12-py3-none-any.whl", hash = "sha256:d98743d81d498a2d3eaf165196e65481f0d2ea85281463d856b1e51b09f62dce"}, - {file = "webcolors-1.12.tar.gz", hash = "sha256:16d043d3a08fd6a1b1b7e3e9e62640d09790dce80d2bdd4792a175b35fe794a9"}, + {file = "webcolors-1.13-py3-none-any.whl", hash = "sha256:29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf"}, + {file = "webcolors-1.13.tar.gz", hash = "sha256:c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a"}, ] +[package.extras] +docs = ["furo", "sphinx", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-notfound-page", "sphinxext-opengraph"] +tests = ["pytest", "pytest-cov"] + [[package]] name = "webencodings" version = "0.5.1" description = "Character encoding aliases for legacy web content" -category = "dev" optional = false python-versions = "*" files = [ @@ -2023,38 +2489,108 @@ files = [ [[package]] name = "websocket-client" -version = "1.4.2" +version = "1.6.4" description = "WebSocket client for Python with low level API options" -category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "websocket-client-1.4.2.tar.gz", hash = "sha256:d6e8f90ca8e2dd4e8027c4561adeb9456b54044312dba655e7cae652ceb9ae59"}, - {file = "websocket_client-1.4.2-py3-none-any.whl", hash = "sha256:d6b06432f184438d99ac1f456eaf22fe1ade524c3dd16e661142dc54e9cba574"}, + {file = "websocket-client-1.6.4.tar.gz", hash = "sha256:b3324019b3c28572086c4a319f91d1dcd44e6e11cd340232978c684a7650d0df"}, + {file = "websocket_client-1.6.4-py3-none-any.whl", hash = "sha256:084072e0a7f5f347ef2ac3d8698a5e0b4ffbfcab607628cadabc650fc9a83a24"}, ] [package.extras] -docs = ["Sphinx (>=3.4)", "sphinx-rtd-theme (>=0.5)"] +docs = ["Sphinx (>=6.0)", "sphinx-rtd-theme (>=1.1.0)"] optional = ["python-socks", "wsaccel"] test = ["websockets"] [[package]] -name = "zipp" -version = "3.11.0" -description = "Backport of pathlib-compatible object wrapper for zip files" -category = "dev" +name = "yarl" +version = "1.9.2" +description = "Yet another URL library" optional = false python-versions = ">=3.7" files = [ - {file = "zipp-3.11.0-py3-none-any.whl", hash = "sha256:83a28fcb75844b5c0cdaf5aa4003c2d728c77e05f5aeabe8e95e56727005fbaa"}, - {file = "zipp-3.11.0.tar.gz", hash = "sha256:a7a22e05929290a67401440b39690ae6563279bced5f314609d9d03798f56766"}, + {file = "yarl-1.9.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8c2ad583743d16ddbdf6bb14b5cd76bf43b0d0006e918809d5d4ddf7bde8dd82"}, + {file = "yarl-1.9.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:82aa6264b36c50acfb2424ad5ca537a2060ab6de158a5bd2a72a032cc75b9eb8"}, + {file = "yarl-1.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c0c77533b5ed4bcc38e943178ccae29b9bcf48ffd1063f5821192f23a1bd27b9"}, + {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee4afac41415d52d53a9833ebae7e32b344be72835bbb589018c9e938045a560"}, + {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9bf345c3a4f5ba7f766430f97f9cc1320786f19584acc7086491f45524a551ac"}, + {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a96c19c52ff442a808c105901d0bdfd2e28575b3d5f82e2f5fd67e20dc5f4ea"}, + {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:891c0e3ec5ec881541f6c5113d8df0315ce5440e244a716b95f2525b7b9f3608"}, + {file = "yarl-1.9.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c3a53ba34a636a256d767c086ceb111358876e1fb6b50dfc4d3f4951d40133d5"}, + {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:566185e8ebc0898b11f8026447eacd02e46226716229cea8db37496c8cdd26e0"}, + {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:2b0738fb871812722a0ac2154be1f049c6223b9f6f22eec352996b69775b36d4"}, + {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:32f1d071b3f362c80f1a7d322bfd7b2d11e33d2adf395cc1dd4df36c9c243095"}, + {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:e9fdc7ac0d42bc3ea78818557fab03af6181e076a2944f43c38684b4b6bed8e3"}, + {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:56ff08ab5df8429901ebdc5d15941b59f6253393cb5da07b4170beefcf1b2528"}, + {file = "yarl-1.9.2-cp310-cp310-win32.whl", hash = "sha256:8ea48e0a2f931064469bdabca50c2f578b565fc446f302a79ba6cc0ee7f384d3"}, + {file = "yarl-1.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:50f33040f3836e912ed16d212f6cc1efb3231a8a60526a407aeb66c1c1956dde"}, + {file = "yarl-1.9.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:646d663eb2232d7909e6601f1a9107e66f9791f290a1b3dc7057818fe44fc2b6"}, + {file = "yarl-1.9.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aff634b15beff8902d1f918012fc2a42e0dbae6f469fce134c8a0dc51ca423bb"}, + {file = "yarl-1.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a83503934c6273806aed765035716216cc9ab4e0364f7f066227e1aaea90b8d0"}, + {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b25322201585c69abc7b0e89e72790469f7dad90d26754717f3310bfe30331c2"}, + {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22a94666751778629f1ec4280b08eb11815783c63f52092a5953faf73be24191"}, + {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ec53a0ea2a80c5cd1ab397925f94bff59222aa3cf9c6da938ce05c9ec20428d"}, + {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:159d81f22d7a43e6eabc36d7194cb53f2f15f498dbbfa8edc8a3239350f59fe7"}, + {file = "yarl-1.9.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:832b7e711027c114d79dffb92576acd1bd2decc467dec60e1cac96912602d0e6"}, + {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:95d2ecefbcf4e744ea952d073c6922e72ee650ffc79028eb1e320e732898d7e8"}, + {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d4e2c6d555e77b37288eaf45b8f60f0737c9efa3452c6c44626a5455aeb250b9"}, + {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:783185c75c12a017cc345015ea359cc801c3b29a2966c2655cd12b233bf5a2be"}, + {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:b8cc1863402472f16c600e3e93d542b7e7542a540f95c30afd472e8e549fc3f7"}, + {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:822b30a0f22e588b32d3120f6d41e4ed021806418b4c9f0bc3048b8c8cb3f92a"}, + {file = "yarl-1.9.2-cp311-cp311-win32.whl", hash = "sha256:a60347f234c2212a9f0361955007fcf4033a75bf600a33c88a0a8e91af77c0e8"}, + {file = "yarl-1.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:be6b3fdec5c62f2a67cb3f8c6dbf56bbf3f61c0f046f84645cd1ca73532ea051"}, + {file = "yarl-1.9.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:38a3928ae37558bc1b559f67410df446d1fbfa87318b124bf5032c31e3447b74"}, + {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac9bb4c5ce3975aeac288cfcb5061ce60e0d14d92209e780c93954076c7c4367"}, + {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3da8a678ca8b96c8606bbb8bfacd99a12ad5dd288bc6f7979baddd62f71c63ef"}, + {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:13414591ff516e04fcdee8dc051c13fd3db13b673c7a4cb1350e6b2ad9639ad3"}, + {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf74d08542c3a9ea97bb8f343d4fcbd4d8f91bba5ec9d5d7f792dbe727f88938"}, + {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e7221580dc1db478464cfeef9b03b95c5852cc22894e418562997df0d074ccc"}, + {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:494053246b119b041960ddcd20fd76224149cfea8ed8777b687358727911dd33"}, + {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:52a25809fcbecfc63ac9ba0c0fb586f90837f5425edfd1ec9f3372b119585e45"}, + {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:e65610c5792870d45d7b68c677681376fcf9cc1c289f23e8e8b39c1485384185"}, + {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:1b1bba902cba32cdec51fca038fd53f8beee88b77efc373968d1ed021024cc04"}, + {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:662e6016409828ee910f5d9602a2729a8a57d74b163c89a837de3fea050c7582"}, + {file = "yarl-1.9.2-cp37-cp37m-win32.whl", hash = "sha256:f364d3480bffd3aa566e886587eaca7c8c04d74f6e8933f3f2c996b7f09bee1b"}, + {file = "yarl-1.9.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6a5883464143ab3ae9ba68daae8e7c5c95b969462bbe42e2464d60e7e2698368"}, + {file = "yarl-1.9.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5610f80cf43b6202e2c33ba3ec2ee0a2884f8f423c8f4f62906731d876ef4fac"}, + {file = "yarl-1.9.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b9a4e67ad7b646cd6f0938c7ebfd60e481b7410f574c560e455e938d2da8e0f4"}, + {file = "yarl-1.9.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:83fcc480d7549ccebe9415d96d9263e2d4226798c37ebd18c930fce43dfb9574"}, + {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fcd436ea16fee7d4207c045b1e340020e58a2597301cfbcfdbe5abd2356c2fb"}, + {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84e0b1599334b1e1478db01b756e55937d4614f8654311eb26012091be109d59"}, + {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3458a24e4ea3fd8930e934c129b676c27452e4ebda80fbe47b56d8c6c7a63a9e"}, + {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:838162460b3a08987546e881a2bfa573960bb559dfa739e7800ceeec92e64417"}, + {file = "yarl-1.9.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4e2d08f07a3d7d3e12549052eb5ad3eab1c349c53ac51c209a0e5991bbada78"}, + {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:de119f56f3c5f0e2fb4dee508531a32b069a5f2c6e827b272d1e0ff5ac040333"}, + {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:149ddea5abf329752ea5051b61bd6c1d979e13fbf122d3a1f9f0c8be6cb6f63c"}, + {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:674ca19cbee4a82c9f54e0d1eee28116e63bc6fd1e96c43031d11cbab8b2afd5"}, + {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:9b3152f2f5677b997ae6c804b73da05a39daa6a9e85a512e0e6823d81cdad7cc"}, + {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5415d5a4b080dc9612b1b63cba008db84e908b95848369aa1da3686ae27b6d2b"}, + {file = "yarl-1.9.2-cp38-cp38-win32.whl", hash = "sha256:f7a3d8146575e08c29ed1cd287068e6d02f1c7bdff8970db96683b9591b86ee7"}, + {file = "yarl-1.9.2-cp38-cp38-win_amd64.whl", hash = "sha256:63c48f6cef34e6319a74c727376e95626f84ea091f92c0250a98e53e62c77c72"}, + {file = "yarl-1.9.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:75df5ef94c3fdc393c6b19d80e6ef1ecc9ae2f4263c09cacb178d871c02a5ba9"}, + {file = "yarl-1.9.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c027a6e96ef77d401d8d5a5c8d6bc478e8042f1e448272e8d9752cb0aff8b5c8"}, + {file = "yarl-1.9.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f3b078dbe227f79be488ffcfc7a9edb3409d018e0952cf13f15fd6512847f3f7"}, + {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59723a029760079b7d991a401386390c4be5bfec1e7dd83e25a6a0881859e716"}, + {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b03917871bf859a81ccb180c9a2e6c1e04d2f6a51d953e6a5cdd70c93d4e5a2a"}, + {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c1012fa63eb6c032f3ce5d2171c267992ae0c00b9e164efe4d73db818465fac3"}, + {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a74dcbfe780e62f4b5a062714576f16c2f3493a0394e555ab141bf0d746bb955"}, + {file = "yarl-1.9.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c56986609b057b4839968ba901944af91b8e92f1725d1a2d77cbac6972b9ed1"}, + {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2c315df3293cd521033533d242d15eab26583360b58f7ee5d9565f15fee1bef4"}, + {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:b7232f8dfbd225d57340e441d8caf8652a6acd06b389ea2d3222b8bc89cbfca6"}, + {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:53338749febd28935d55b41bf0bcc79d634881195a39f6b2f767870b72514caf"}, + {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:066c163aec9d3d073dc9ffe5dd3ad05069bcb03fcaab8d221290ba99f9f69ee3"}, + {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8288d7cd28f8119b07dd49b7230d6b4562f9b61ee9a4ab02221060d21136be80"}, + {file = "yarl-1.9.2-cp39-cp39-win32.whl", hash = "sha256:b124e2a6d223b65ba8768d5706d103280914d61f5cae3afbc50fc3dfcc016623"}, + {file = "yarl-1.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:61016e7d582bc46a5378ffdd02cd0314fb8ba52f40f9cf4d9a5e7dbef88dee18"}, + {file = "yarl-1.9.2.tar.gz", hash = "sha256:04ab9d4b9f587c06d801c2abfe9317b77cdf996c65a90d5e84ecc45010823571"}, ] -[package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)"] -testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] +[package.dependencies] +idna = ">=2.0" +multidict = ">=4.0" [metadata] lock-version = "2.0" -python-versions = "3.9.2" -content-hash = "590a53219147a319e3d1c5c55e49efbf2ae9375823250f5aaf957c9040739251" +python-versions = "3.10.12" +content-hash = "28451b147686a3f8c798377e6e179bfe265074e5b4ff0e57d69d9ea3ec818464" diff --git a/apps/openchallenges/notebook/poetry.toml b/apps/openchallenges/notebook/poetry.toml new file mode 100644 index 0000000000..62e2dff2a2 --- /dev/null +++ b/apps/openchallenges/notebook/poetry.toml @@ -0,0 +1,3 @@ +[virtualenvs] +in-project = true +create = true diff --git a/apps/openchallenges/notebook/prepare-python.sh b/apps/openchallenges/notebook/prepare-python.sh index 1849996675..60af21daad 100755 --- a/apps/openchallenges/notebook/prepare-python.sh +++ b/apps/openchallenges/notebook/prepare-python.sh @@ -1,8 +1,13 @@ #!/usr/bin/env bash -pyenv install --skip-existing 3.9.2 -pyenv local 3.9.2 -poetry env use 3.9.2 -poetry run pip install "cython<3.0.0" -poetry run pip install --no-build-isolation pyyaml==5.4.1 +PYTHON_VERSION="3.10.12" + +pyenv install --skip-existing $PYTHON_VERSION + +# Initializing pyenv again solves an issue encountered by GitHub action where the version of Python +# installed above is not detected. +eval "$(pyenv init -)" + +pyenv local $PYTHON_VERSION +poetry env use $PYTHON_VERSION poetry install --with dev \ No newline at end of file diff --git a/apps/openchallenges/notebook/pyproject.toml b/apps/openchallenges/notebook/pyproject.toml index 0482e98fc8..49a8783be2 100644 --- a/apps/openchallenges/notebook/pyproject.toml +++ b/apps/openchallenges/notebook/pyproject.toml @@ -7,8 +7,11 @@ readme = "README.md" packages = [] [tool.poetry.dependencies] -python = "3.9.2" +python = "3.10.12" kaggle = "1.5.12" +openchallenges-client = {path = "../../../libs/openchallenges/api-client-python"} +openai = "0.28.1" +python-dotenv = "1.0.0" [tool.poetry.group.dev.dependencies] jupyterlab = "3.5.2" diff --git a/libs/openchallenges/api-client-python/.gitignore b/libs/openchallenges/api-client-python/.gitignore new file mode 100644 index 0000000000..68bc17f9ff --- /dev/null +++ b/libs/openchallenges/api-client-python/.gitignore @@ -0,0 +1,160 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/#use-with-ide +.pdm.toml + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +#.idea/ diff --git a/libs/openchallenges/api-client-python/.openapi-generator-ignore b/libs/openchallenges/api-client-python/.openapi-generator-ignore new file mode 100644 index 0000000000..453fab92bb --- /dev/null +++ b/libs/openchallenges/api-client-python/.openapi-generator-ignore @@ -0,0 +1,31 @@ +# OpenAPI Generator Ignore +# Generated by openapi-generator https://github.com/openapitools/openapi-generator + +# Use this file to prevent files from being overwritten by the generator. +# The patterns follow closely to .gitignore or .dockerignore. + +# As an example, the C# client generator defines ApiClient.cs. +# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line: +#ApiClient.cs + +# You can match any string of characters against a directory, file or extension with a single asterisk (*): +#foo/*/qux +# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux + +# You can recursively match patterns against a directory, file or extension with a double asterisk (**): +#foo/**/qux +# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux + +# You can also negate patterns with an exclamation (!). +# For example, you can ignore all files in a docs folder with the file extension .md: +#docs/*.md +# Then explicitly reverse the ignore rule for a single file: +#!docs/README.md +.github/ +.gitignore +.gitlab-ci.yml +.travis.yml +git_push.sh +pyproject.toml +README.md +setup.cfg \ No newline at end of file diff --git a/libs/openchallenges/api-client-python/.openapi-generator/FILES b/libs/openchallenges/api-client-python/.openapi-generator/FILES new file mode 100644 index 0000000000..d163c7b1ab --- /dev/null +++ b/libs/openchallenges/api-client-python/.openapi-generator/FILES @@ -0,0 +1,116 @@ +docs/BasicError.md +docs/Challenge.md +docs/ChallengeAnalyticsApi.md +docs/ChallengeApi.md +docs/ChallengeCategory.md +docs/ChallengeContribution.md +docs/ChallengeContributionApi.md +docs/ChallengeContributionRole.md +docs/ChallengeContributionsPage.md +docs/ChallengeDifficulty.md +docs/ChallengeDirection.md +docs/ChallengeIncentive.md +docs/ChallengeInputDataType.md +docs/ChallengeInputDataTypeApi.md +docs/ChallengeInputDataTypeDirection.md +docs/ChallengeInputDataTypeSearchQuery.md +docs/ChallengeInputDataTypeSort.md +docs/ChallengeInputDataTypesPage.md +docs/ChallengePlatform.md +docs/ChallengePlatformApi.md +docs/ChallengePlatformDirection.md +docs/ChallengePlatformSearchQuery.md +docs/ChallengePlatformSort.md +docs/ChallengePlatformsPage.md +docs/ChallengeSearchQuery.md +docs/ChallengeSort.md +docs/ChallengeStatus.md +docs/ChallengeSubmissionType.md +docs/ChallengesPage.md +docs/ChallengesPerYear.md +docs/Image.md +docs/ImageApi.md +docs/ImageAspectRatio.md +docs/ImageHeight.md +docs/ImageQuery.md +docs/Organization.md +docs/OrganizationApi.md +docs/OrganizationCategory.md +docs/OrganizationDirection.md +docs/OrganizationSearchQuery.md +docs/OrganizationSort.md +docs/OrganizationsPage.md +docs/PageMetadata.md +docs/SimpleChallengeInputDataType.md +docs/SimpleChallengePlatform.md +docs/User.md +docs/UserApi.md +docs/UserCreateRequest.md +docs/UserCreateResponse.md +docs/UserStatus.md +docs/UsersPage.md +openchallenges_client/__init__.py +openchallenges_client/api/__init__.py +openchallenges_client/api/challenge_analytics_api.py +openchallenges_client/api/challenge_api.py +openchallenges_client/api/challenge_contribution_api.py +openchallenges_client/api/challenge_input_data_type_api.py +openchallenges_client/api/challenge_platform_api.py +openchallenges_client/api/image_api.py +openchallenges_client/api/organization_api.py +openchallenges_client/api/user_api.py +openchallenges_client/api_client.py +openchallenges_client/api_response.py +openchallenges_client/configuration.py +openchallenges_client/exceptions.py +openchallenges_client/models/__init__.py +openchallenges_client/models/basic_error.py +openchallenges_client/models/challenge.py +openchallenges_client/models/challenge_category.py +openchallenges_client/models/challenge_contribution.py +openchallenges_client/models/challenge_contribution_role.py +openchallenges_client/models/challenge_contributions_page.py +openchallenges_client/models/challenge_difficulty.py +openchallenges_client/models/challenge_direction.py +openchallenges_client/models/challenge_incentive.py +openchallenges_client/models/challenge_input_data_type.py +openchallenges_client/models/challenge_input_data_type_direction.py +openchallenges_client/models/challenge_input_data_type_search_query.py +openchallenges_client/models/challenge_input_data_type_sort.py +openchallenges_client/models/challenge_input_data_types_page.py +openchallenges_client/models/challenge_platform.py +openchallenges_client/models/challenge_platform_direction.py +openchallenges_client/models/challenge_platform_search_query.py +openchallenges_client/models/challenge_platform_sort.py +openchallenges_client/models/challenge_platforms_page.py +openchallenges_client/models/challenge_search_query.py +openchallenges_client/models/challenge_sort.py +openchallenges_client/models/challenge_status.py +openchallenges_client/models/challenge_submission_type.py +openchallenges_client/models/challenges_page.py +openchallenges_client/models/challenges_per_year.py +openchallenges_client/models/image.py +openchallenges_client/models/image_aspect_ratio.py +openchallenges_client/models/image_height.py +openchallenges_client/models/image_query.py +openchallenges_client/models/organization.py +openchallenges_client/models/organization_category.py +openchallenges_client/models/organization_direction.py +openchallenges_client/models/organization_search_query.py +openchallenges_client/models/organization_sort.py +openchallenges_client/models/organizations_page.py +openchallenges_client/models/page_metadata.py +openchallenges_client/models/simple_challenge_input_data_type.py +openchallenges_client/models/simple_challenge_platform.py +openchallenges_client/models/user.py +openchallenges_client/models/user_create_request.py +openchallenges_client/models/user_create_response.py +openchallenges_client/models/user_status.py +openchallenges_client/models/users_page.py +openchallenges_client/py.typed +openchallenges_client/rest.py +requirements.txt +setup.py +test-requirements.txt +test/__init__.py +tox.ini diff --git a/libs/openchallenges/api-client-python/.openapi-generator/VERSION b/libs/openchallenges/api-client-python/.openapi-generator/VERSION new file mode 100644 index 0000000000..4122521804 --- /dev/null +++ b/libs/openchallenges/api-client-python/.openapi-generator/VERSION @@ -0,0 +1 @@ +7.0.0 \ No newline at end of file diff --git a/libs/openchallenges/api-client-python/.python-version b/libs/openchallenges/api-client-python/.python-version new file mode 100644 index 0000000000..2009c7dfad --- /dev/null +++ b/libs/openchallenges/api-client-python/.python-version @@ -0,0 +1 @@ +3.9.2 diff --git a/libs/openchallenges/api-client-python/README.md b/libs/openchallenges/api-client-python/README.md new file mode 100644 index 0000000000..f5f899474f --- /dev/null +++ b/libs/openchallenges/api-client-python/README.md @@ -0,0 +1,162 @@ +# openchallenges-client +No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + +This Python package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project: + +- API version: 1.0.0 +- Package version: 1.0.0 +- Build package: org.openapitools.codegen.languages.PythonClientCodegen +For more information, please visit [https://github.com/Sage-Bionetworks/sage-monorepo](https://github.com/Sage-Bionetworks/sage-monorepo) + +## Requirements. + +Python 3.7+ + +## Installation & Usage +### pip install + +If the python package is hosted on a repository, you can install directly using: + +```sh +pip install git+https://github.com/GIT_USER_ID/GIT_REPO_ID.git +``` +(you may need to run `pip` with root permission: `sudo pip install git+https://github.com/GIT_USER_ID/GIT_REPO_ID.git`) + +Then import the package: +```python +import openchallenges_client +``` + +### Setuptools + +Install via [Setuptools](http://pypi.python.org/pypi/setuptools). + +```sh +python setup.py install --user +``` +(or `sudo python setup.py install` to install the package for all users) + +Then import the package: +```python +import openchallenges_client +``` + +### Tests + +Execute `pytest` to run the tests. + +## Getting Started + +Please follow the [installation procedure](#installation--usage) and then run the following: + +```python + +import time +import openchallenges_client +from openchallenges_client.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to http://localhost/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = openchallenges_client.Configuration( + host = "http://localhost/v1" +) + + + +# Enter a context with an instance of the API client +with openchallenges_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = openchallenges_client.ChallengeApi(api_client) + challenge_id = 56 # int | The unique identifier of the challenge. + + try: + # Get a challenge + api_response = api_instance.get_challenge(challenge_id) + print("The response of ChallengeApi->get_challenge:\n") + pprint(api_response) + except ApiException as e: + print("Exception when calling ChallengeApi->get_challenge: %s\n" % e) + +``` + +## Documentation for API Endpoints + +All URIs are relative to *http://localhost/v1* + +Class | Method | HTTP request | Description +------------ | ------------- | ------------- | ------------- +*ChallengeApi* | [**get_challenge**](docs/ChallengeApi.md#get_challenge) | **GET** /challenges/{challengeId} | Get a challenge +*ChallengeApi* | [**list_challenges**](docs/ChallengeApi.md#list_challenges) | **GET** /challenges | List challenges +*ChallengeAnalyticsApi* | [**get_challenges_per_year**](docs/ChallengeAnalyticsApi.md#get_challenges_per_year) | **GET** /challengeAnalytics/challengesPerYear | Get the number of challenges tracked per year +*ChallengeContributionApi* | [**list_challenge_contributions**](docs/ChallengeContributionApi.md#list_challenge_contributions) | **GET** /challenges/{challengeId}/contributions | List challenge contributions +*ChallengeInputDataTypeApi* | [**list_challenge_input_data_types**](docs/ChallengeInputDataTypeApi.md#list_challenge_input_data_types) | **GET** /challengeInputDataTypes | List challenge input data types +*ChallengePlatformApi* | [**get_challenge_platform**](docs/ChallengePlatformApi.md#get_challenge_platform) | **GET** /challengePlatforms/{challengePlatformName} | Get a challenge platform +*ChallengePlatformApi* | [**list_challenge_platforms**](docs/ChallengePlatformApi.md#list_challenge_platforms) | **GET** /challengePlatforms | List challenge platforms +*ImageApi* | [**get_image**](docs/ImageApi.md#get_image) | **GET** /images | Get an image +*OrganizationApi* | [**get_organization**](docs/OrganizationApi.md#get_organization) | **GET** /organizations/{org} | Get an organization +*OrganizationApi* | [**list_organizations**](docs/OrganizationApi.md#list_organizations) | **GET** /organizations | List organizations +*UserApi* | [**create_user**](docs/UserApi.md#create_user) | **POST** /users/register | Create a user +*UserApi* | [**delete_user**](docs/UserApi.md#delete_user) | **DELETE** /users/{userId} | Delete a user +*UserApi* | [**get_user**](docs/UserApi.md#get_user) | **GET** /users/{userId} | Get a user +*UserApi* | [**list_users**](docs/UserApi.md#list_users) | **GET** /users | Get all users + + +## Documentation For Models + + - [BasicError](docs/BasicError.md) + - [Challenge](docs/Challenge.md) + - [ChallengeCategory](docs/ChallengeCategory.md) + - [ChallengeContribution](docs/ChallengeContribution.md) + - [ChallengeContributionRole](docs/ChallengeContributionRole.md) + - [ChallengeContributionsPage](docs/ChallengeContributionsPage.md) + - [ChallengeDifficulty](docs/ChallengeDifficulty.md) + - [ChallengeDirection](docs/ChallengeDirection.md) + - [ChallengeIncentive](docs/ChallengeIncentive.md) + - [ChallengeInputDataType](docs/ChallengeInputDataType.md) + - [ChallengeInputDataTypeDirection](docs/ChallengeInputDataTypeDirection.md) + - [ChallengeInputDataTypeSearchQuery](docs/ChallengeInputDataTypeSearchQuery.md) + - [ChallengeInputDataTypeSort](docs/ChallengeInputDataTypeSort.md) + - [ChallengeInputDataTypesPage](docs/ChallengeInputDataTypesPage.md) + - [ChallengePlatform](docs/ChallengePlatform.md) + - [ChallengePlatformDirection](docs/ChallengePlatformDirection.md) + - [ChallengePlatformSearchQuery](docs/ChallengePlatformSearchQuery.md) + - [ChallengePlatformSort](docs/ChallengePlatformSort.md) + - [ChallengePlatformsPage](docs/ChallengePlatformsPage.md) + - [ChallengeSearchQuery](docs/ChallengeSearchQuery.md) + - [ChallengeSort](docs/ChallengeSort.md) + - [ChallengeStatus](docs/ChallengeStatus.md) + - [ChallengeSubmissionType](docs/ChallengeSubmissionType.md) + - [ChallengesPage](docs/ChallengesPage.md) + - [ChallengesPerYear](docs/ChallengesPerYear.md) + - [Image](docs/Image.md) + - [ImageAspectRatio](docs/ImageAspectRatio.md) + - [ImageHeight](docs/ImageHeight.md) + - [ImageQuery](docs/ImageQuery.md) + - [Organization](docs/Organization.md) + - [OrganizationCategory](docs/OrganizationCategory.md) + - [OrganizationDirection](docs/OrganizationDirection.md) + - [OrganizationSearchQuery](docs/OrganizationSearchQuery.md) + - [OrganizationSort](docs/OrganizationSort.md) + - [OrganizationsPage](docs/OrganizationsPage.md) + - [PageMetadata](docs/PageMetadata.md) + - [SimpleChallengeInputDataType](docs/SimpleChallengeInputDataType.md) + - [SimpleChallengePlatform](docs/SimpleChallengePlatform.md) + - [User](docs/User.md) + - [UserCreateRequest](docs/UserCreateRequest.md) + - [UserCreateResponse](docs/UserCreateResponse.md) + - [UserStatus](docs/UserStatus.md) + - [UsersPage](docs/UsersPage.md) + + + +## Documentation For Authorization + +Endpoints do not require authorization. + + +## Author + + + + diff --git a/libs/openchallenges/api-client-python/docs/BasicError.md b/libs/openchallenges/api-client-python/docs/BasicError.md new file mode 100644 index 0000000000..d9fd1c9fa1 --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/BasicError.md @@ -0,0 +1,32 @@ +# BasicError + +Problem details (tools.ietf.org/html/rfc7807) + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**title** | **str** | A human readable documentation for the problem type | +**status** | **int** | The HTTP status code | +**detail** | **str** | A human readable explanation specific to this occurrence of the problem | [optional] +**type** | **str** | An absolute URI that identifies the problem type | [optional] + +## Example + +```python +from openchallenges_client.models.basic_error import BasicError + +# TODO update the JSON string below +json = "{}" +# create an instance of BasicError from a JSON string +basic_error_instance = BasicError.from_json(json) +# print the JSON string representation of the object +print BasicError.to_json() + +# convert the object into a dict +basic_error_dict = basic_error_instance.to_dict() +# create an instance of BasicError from a dict +basic_error_form_dict = basic_error.from_dict(basic_error_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/libs/openchallenges/api-client-python/docs/Challenge.md b/libs/openchallenges/api-client-python/docs/Challenge.md new file mode 100644 index 0000000000..b6eae5a81f --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/Challenge.md @@ -0,0 +1,47 @@ +# Challenge + +A challenge + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **int** | The unique identifier of the challenge. | +**slug** | **str** | The slug of the challenge. | +**name** | **str** | The name of the challenge. | +**headline** | **str** | The headline of the challenge. | [optional] +**description** | **str** | The description of the challenge. | +**doi** | **str** | | [optional] +**status** | [**ChallengeStatus**](ChallengeStatus.md) | | +**difficulty** | [**ChallengeDifficulty**](ChallengeDifficulty.md) | | +**platform** | [**SimpleChallengePlatform**](SimpleChallengePlatform.md) | | +**website_url** | **str** | | [optional] +**avatar_url** | **str** | | [optional] +**incentives** | [**List[ChallengeIncentive]**](ChallengeIncentive.md) | | +**submission_types** | [**List[ChallengeSubmissionType]**](ChallengeSubmissionType.md) | | +**input_data_types** | [**List[SimpleChallengeInputDataType]**](SimpleChallengeInputDataType.md) | | [optional] +**start_date** | **date** | The start date of the challenge. | [optional] +**end_date** | **date** | The end date of the challenge. | [optional] +**starred_count** | **int** | The number of times the challenge has been starred by users. | [default to 0] +**created_at** | **datetime** | | +**updated_at** | **datetime** | | + +## Example + +```python +from openchallenges_client.models.challenge import Challenge + +# TODO update the JSON string below +json = "{}" +# create an instance of Challenge from a JSON string +challenge_instance = Challenge.from_json(json) +# print the JSON string representation of the object +print Challenge.to_json() + +# convert the object into a dict +challenge_dict = challenge_instance.to_dict() +# create an instance of Challenge from a dict +challenge_form_dict = challenge.from_dict(challenge_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/libs/openchallenges/api-client-python/docs/ChallengeAnalyticsApi.md b/libs/openchallenges/api-client-python/docs/ChallengeAnalyticsApi.md new file mode 100644 index 0000000000..df2e47470d --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/ChallengeAnalyticsApi.md @@ -0,0 +1,73 @@ +# openchallenges_client.ChallengeAnalyticsApi + +All URIs are relative to *http://localhost/v1* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**get_challenges_per_year**](ChallengeAnalyticsApi.md#get_challenges_per_year) | **GET** /challengeAnalytics/challengesPerYear | Get the number of challenges tracked per year + + +# **get_challenges_per_year** +> ChallengesPerYear get_challenges_per_year() + +Get the number of challenges tracked per year + +Returns the number of challenges tracked per year + +### Example + +```python +import time +import os +import openchallenges_client +from openchallenges_client.models.challenges_per_year import ChallengesPerYear +from openchallenges_client.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to http://localhost/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = openchallenges_client.Configuration( + host = "http://localhost/v1" +) + + +# Enter a context with an instance of the API client +with openchallenges_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = openchallenges_client.ChallengeAnalyticsApi(api_client) + + try: + # Get the number of challenges tracked per year + api_response = api_instance.get_challenges_per_year() + print("The response of ChallengeAnalyticsApi->get_challenges_per_year:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling ChallengeAnalyticsApi->get_challenges_per_year: %s\n" % e) +``` + + + +### Parameters +This endpoint does not need any parameter. + +### Return type + +[**ChallengesPerYear**](ChallengesPerYear.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json, application/problem+json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | An object | - | +**500** | The request cannot be fulfilled due to an unexpected server error | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/libs/openchallenges/api-client-python/docs/ChallengeApi.md b/libs/openchallenges/api-client-python/docs/ChallengeApi.md new file mode 100644 index 0000000000..6fef394cce --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/ChallengeApi.md @@ -0,0 +1,149 @@ +# openchallenges_client.ChallengeApi + +All URIs are relative to *http://localhost/v1* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**get_challenge**](ChallengeApi.md#get_challenge) | **GET** /challenges/{challengeId} | Get a challenge +[**list_challenges**](ChallengeApi.md#list_challenges) | **GET** /challenges | List challenges + + +# **get_challenge** +> Challenge get_challenge(challenge_id) + +Get a challenge + +Returns the challenge specified + +### Example + +```python +import time +import os +import openchallenges_client +from openchallenges_client.models.challenge import Challenge +from openchallenges_client.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to http://localhost/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = openchallenges_client.Configuration( + host = "http://localhost/v1" +) + + +# Enter a context with an instance of the API client +with openchallenges_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = openchallenges_client.ChallengeApi(api_client) + challenge_id = 56 # int | The unique identifier of the challenge. + + try: + # Get a challenge + api_response = api_instance.get_challenge(challenge_id) + print("The response of ChallengeApi->get_challenge:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling ChallengeApi->get_challenge: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **challenge_id** | **int**| The unique identifier of the challenge. | + +### Return type + +[**Challenge**](Challenge.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json, application/problem+json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | A challenge | - | +**404** | The specified resource was not found | - | +**500** | The request cannot be fulfilled due to an unexpected server error | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **list_challenges** +> ChallengesPage list_challenges(challenge_search_query=challenge_search_query) + +List challenges + +List challenges + +### Example + +```python +import time +import os +import openchallenges_client +from openchallenges_client.models.challenge_search_query import ChallengeSearchQuery +from openchallenges_client.models.challenges_page import ChallengesPage +from openchallenges_client.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to http://localhost/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = openchallenges_client.Configuration( + host = "http://localhost/v1" +) + + +# Enter a context with an instance of the API client +with openchallenges_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = openchallenges_client.ChallengeApi(api_client) + challenge_search_query = openchallenges_client.ChallengeSearchQuery() # ChallengeSearchQuery | The search query used to find challenges. (optional) + + try: + # List challenges + api_response = api_instance.list_challenges(challenge_search_query=challenge_search_query) + print("The response of ChallengeApi->list_challenges:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling ChallengeApi->list_challenges: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **challenge_search_query** | [**ChallengeSearchQuery**](.md)| The search query used to find challenges. | [optional] + +### Return type + +[**ChallengesPage**](ChallengesPage.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json, application/problem+json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Success | - | +**400** | Invalid request | - | +**500** | The request cannot be fulfilled due to an unexpected server error | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/libs/openchallenges/api-client-python/docs/ChallengeCategory.md b/libs/openchallenges/api-client-python/docs/ChallengeCategory.md new file mode 100644 index 0000000000..79e3e7b3b2 --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/ChallengeCategory.md @@ -0,0 +1,11 @@ +# ChallengeCategory + +The category of the challenge. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/libs/openchallenges/api-client-python/docs/ChallengeContribution.md b/libs/openchallenges/api-client-python/docs/ChallengeContribution.md new file mode 100644 index 0000000000..4149e35f31 --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/ChallengeContribution.md @@ -0,0 +1,31 @@ +# ChallengeContribution + +A challenge contribution. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**challenge_id** | **int** | The unique identifier of the challenge. | +**organization_id** | **int** | The unique identifier of an organization | +**role** | [**ChallengeContributionRole**](ChallengeContributionRole.md) | | + +## Example + +```python +from openchallenges_client.models.challenge_contribution import ChallengeContribution + +# TODO update the JSON string below +json = "{}" +# create an instance of ChallengeContribution from a JSON string +challenge_contribution_instance = ChallengeContribution.from_json(json) +# print the JSON string representation of the object +print ChallengeContribution.to_json() + +# convert the object into a dict +challenge_contribution_dict = challenge_contribution_instance.to_dict() +# create an instance of ChallengeContribution from a dict +challenge_contribution_form_dict = challenge_contribution.from_dict(challenge_contribution_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/libs/openchallenges/api-client-python/docs/ChallengeContributionApi.md b/libs/openchallenges/api-client-python/docs/ChallengeContributionApi.md new file mode 100644 index 0000000000..8aa6ea883d --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/ChallengeContributionApi.md @@ -0,0 +1,78 @@ +# openchallenges_client.ChallengeContributionApi + +All URIs are relative to *http://localhost/v1* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**list_challenge_contributions**](ChallengeContributionApi.md#list_challenge_contributions) | **GET** /challenges/{challengeId}/contributions | List challenge contributions + + +# **list_challenge_contributions** +> ChallengeContributionsPage list_challenge_contributions(challenge_id) + +List challenge contributions + +List challenge contributions + +### Example + +```python +import time +import os +import openchallenges_client +from openchallenges_client.models.challenge_contributions_page import ChallengeContributionsPage +from openchallenges_client.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to http://localhost/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = openchallenges_client.Configuration( + host = "http://localhost/v1" +) + + +# Enter a context with an instance of the API client +with openchallenges_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = openchallenges_client.ChallengeContributionApi(api_client) + challenge_id = 56 # int | The unique identifier of the challenge. + + try: + # List challenge contributions + api_response = api_instance.list_challenge_contributions(challenge_id) + print("The response of ChallengeContributionApi->list_challenge_contributions:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling ChallengeContributionApi->list_challenge_contributions: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **challenge_id** | **int**| The unique identifier of the challenge. | + +### Return type + +[**ChallengeContributionsPage**](ChallengeContributionsPage.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json, application/problem+json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Success | - | +**400** | Invalid request | - | +**500** | The request cannot be fulfilled due to an unexpected server error | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/libs/openchallenges/api-client-python/docs/ChallengeContributionRole.md b/libs/openchallenges/api-client-python/docs/ChallengeContributionRole.md new file mode 100644 index 0000000000..4040b5bd18 --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/ChallengeContributionRole.md @@ -0,0 +1,11 @@ +# ChallengeContributionRole + +The nature of a challenge contribution. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/libs/openchallenges/api-client-python/docs/ChallengeContributionsPage.md b/libs/openchallenges/api-client-python/docs/ChallengeContributionsPage.md new file mode 100644 index 0000000000..3abf677624 --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/ChallengeContributionsPage.md @@ -0,0 +1,35 @@ +# ChallengeContributionsPage + +A page of challenge challenge contributions. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**number** | **int** | The page number. | +**size** | **int** | The number of items in a single page. | +**total_elements** | **int** | Total number of elements in the result set. | +**total_pages** | **int** | Total number of pages in the result set. | +**has_next** | **bool** | Returns if there is a next page. | +**has_previous** | **bool** | Returns if there is a previous page. | +**challenge_contributions** | [**List[ChallengeContribution]**](ChallengeContribution.md) | A list of challenge contributions. | + +## Example + +```python +from openchallenges_client.models.challenge_contributions_page import ChallengeContributionsPage + +# TODO update the JSON string below +json = "{}" +# create an instance of ChallengeContributionsPage from a JSON string +challenge_contributions_page_instance = ChallengeContributionsPage.from_json(json) +# print the JSON string representation of the object +print ChallengeContributionsPage.to_json() + +# convert the object into a dict +challenge_contributions_page_dict = challenge_contributions_page_instance.to_dict() +# create an instance of ChallengeContributionsPage from a dict +challenge_contributions_page_form_dict = challenge_contributions_page.from_dict(challenge_contributions_page_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/libs/openchallenges/api-client-python/docs/ChallengeDifficulty.md b/libs/openchallenges/api-client-python/docs/ChallengeDifficulty.md new file mode 100644 index 0000000000..a435bd59cd --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/ChallengeDifficulty.md @@ -0,0 +1,11 @@ +# ChallengeDifficulty + +The difficulty level of a challenge. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/libs/openchallenges/api-client-python/docs/ChallengeDirection.md b/libs/openchallenges/api-client-python/docs/ChallengeDirection.md new file mode 100644 index 0000000000..a0b91224e4 --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/ChallengeDirection.md @@ -0,0 +1,11 @@ +# ChallengeDirection + +The direction to sort the results by. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/libs/openchallenges/api-client-python/docs/ChallengeIncentive.md b/libs/openchallenges/api-client-python/docs/ChallengeIncentive.md new file mode 100644 index 0000000000..72cf56afc8 --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/ChallengeIncentive.md @@ -0,0 +1,11 @@ +# ChallengeIncentive + +The incentive type of the challenge. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/libs/openchallenges/api-client-python/docs/ChallengeInputDataType.md b/libs/openchallenges/api-client-python/docs/ChallengeInputDataType.md new file mode 100644 index 0000000000..84b4247b47 --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/ChallengeInputDataType.md @@ -0,0 +1,33 @@ +# ChallengeInputDataType + +A challenge input data type. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **int** | The unique identifier of a challenge input data type. | +**slug** | **str** | The slug of the challenge input data type. | +**name** | **str** | The name of the challenge input data type. | +**created_at** | **datetime** | | +**updated_at** | **datetime** | | + +## Example + +```python +from openchallenges_client.models.challenge_input_data_type import ChallengeInputDataType + +# TODO update the JSON string below +json = "{}" +# create an instance of ChallengeInputDataType from a JSON string +challenge_input_data_type_instance = ChallengeInputDataType.from_json(json) +# print the JSON string representation of the object +print ChallengeInputDataType.to_json() + +# convert the object into a dict +challenge_input_data_type_dict = challenge_input_data_type_instance.to_dict() +# create an instance of ChallengeInputDataType from a dict +challenge_input_data_type_form_dict = challenge_input_data_type.from_dict(challenge_input_data_type_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/libs/openchallenges/api-client-python/docs/ChallengeInputDataTypeApi.md b/libs/openchallenges/api-client-python/docs/ChallengeInputDataTypeApi.md new file mode 100644 index 0000000000..3906d096f9 --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/ChallengeInputDataTypeApi.md @@ -0,0 +1,79 @@ +# openchallenges_client.ChallengeInputDataTypeApi + +All URIs are relative to *http://localhost/v1* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**list_challenge_input_data_types**](ChallengeInputDataTypeApi.md#list_challenge_input_data_types) | **GET** /challengeInputDataTypes | List challenge input data types + + +# **list_challenge_input_data_types** +> ChallengeInputDataTypesPage list_challenge_input_data_types(challenge_input_data_type_search_query=challenge_input_data_type_search_query) + +List challenge input data types + +List challenge input data types + +### Example + +```python +import time +import os +import openchallenges_client +from openchallenges_client.models.challenge_input_data_type_search_query import ChallengeInputDataTypeSearchQuery +from openchallenges_client.models.challenge_input_data_types_page import ChallengeInputDataTypesPage +from openchallenges_client.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to http://localhost/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = openchallenges_client.Configuration( + host = "http://localhost/v1" +) + + +# Enter a context with an instance of the API client +with openchallenges_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = openchallenges_client.ChallengeInputDataTypeApi(api_client) + challenge_input_data_type_search_query = openchallenges_client.ChallengeInputDataTypeSearchQuery() # ChallengeInputDataTypeSearchQuery | The search query used to find challenge input data types. (optional) + + try: + # List challenge input data types + api_response = api_instance.list_challenge_input_data_types(challenge_input_data_type_search_query=challenge_input_data_type_search_query) + print("The response of ChallengeInputDataTypeApi->list_challenge_input_data_types:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling ChallengeInputDataTypeApi->list_challenge_input_data_types: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **challenge_input_data_type_search_query** | [**ChallengeInputDataTypeSearchQuery**](.md)| The search query used to find challenge input data types. | [optional] + +### Return type + +[**ChallengeInputDataTypesPage**](ChallengeInputDataTypesPage.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json, application/problem+json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Success | - | +**400** | Invalid request | - | +**500** | The request cannot be fulfilled due to an unexpected server error | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/libs/openchallenges/api-client-python/docs/ChallengeInputDataTypeDirection.md b/libs/openchallenges/api-client-python/docs/ChallengeInputDataTypeDirection.md new file mode 100644 index 0000000000..c3bc1c7385 --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/ChallengeInputDataTypeDirection.md @@ -0,0 +1,11 @@ +# ChallengeInputDataTypeDirection + +The direction to sort the results by. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/libs/openchallenges/api-client-python/docs/ChallengeInputDataTypeSearchQuery.md b/libs/openchallenges/api-client-python/docs/ChallengeInputDataTypeSearchQuery.md new file mode 100644 index 0000000000..e148967100 --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/ChallengeInputDataTypeSearchQuery.md @@ -0,0 +1,33 @@ +# ChallengeInputDataTypeSearchQuery + +A challenge input data type search query. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**page_number** | **int** | The page number. | [optional] [default to 0] +**page_size** | **int** | The number of items in a single page. | [optional] [default to 100] +**sort** | [**ChallengeInputDataTypeSort**](ChallengeInputDataTypeSort.md) | | [optional] +**direction** | [**ChallengeInputDataTypeDirection**](ChallengeInputDataTypeDirection.md) | | [optional] +**search_terms** | **str** | A string of search terms used to filter the results. | [optional] + +## Example + +```python +from openchallenges_client.models.challenge_input_data_type_search_query import ChallengeInputDataTypeSearchQuery + +# TODO update the JSON string below +json = "{}" +# create an instance of ChallengeInputDataTypeSearchQuery from a JSON string +challenge_input_data_type_search_query_instance = ChallengeInputDataTypeSearchQuery.from_json(json) +# print the JSON string representation of the object +print ChallengeInputDataTypeSearchQuery.to_json() + +# convert the object into a dict +challenge_input_data_type_search_query_dict = challenge_input_data_type_search_query_instance.to_dict() +# create an instance of ChallengeInputDataTypeSearchQuery from a dict +challenge_input_data_type_search_query_form_dict = challenge_input_data_type_search_query.from_dict(challenge_input_data_type_search_query_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/libs/openchallenges/api-client-python/docs/ChallengeInputDataTypeSort.md b/libs/openchallenges/api-client-python/docs/ChallengeInputDataTypeSort.md new file mode 100644 index 0000000000..331b4caae8 --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/ChallengeInputDataTypeSort.md @@ -0,0 +1,11 @@ +# ChallengeInputDataTypeSort + +What to sort results by. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/libs/openchallenges/api-client-python/docs/ChallengeInputDataTypesPage.md b/libs/openchallenges/api-client-python/docs/ChallengeInputDataTypesPage.md new file mode 100644 index 0000000000..62dc2ec8ba --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/ChallengeInputDataTypesPage.md @@ -0,0 +1,35 @@ +# ChallengeInputDataTypesPage + +A page of challenge input data types. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**number** | **int** | The page number. | +**size** | **int** | The number of items in a single page. | +**total_elements** | **int** | Total number of elements in the result set. | +**total_pages** | **int** | Total number of pages in the result set. | +**has_next** | **bool** | Returns if there is a next page. | +**has_previous** | **bool** | Returns if there is a previous page. | +**challenge_input_data_types** | [**List[ChallengeInputDataType]**](ChallengeInputDataType.md) | A list of challenge input data types. | + +## Example + +```python +from openchallenges_client.models.challenge_input_data_types_page import ChallengeInputDataTypesPage + +# TODO update the JSON string below +json = "{}" +# create an instance of ChallengeInputDataTypesPage from a JSON string +challenge_input_data_types_page_instance = ChallengeInputDataTypesPage.from_json(json) +# print the JSON string representation of the object +print ChallengeInputDataTypesPage.to_json() + +# convert the object into a dict +challenge_input_data_types_page_dict = challenge_input_data_types_page_instance.to_dict() +# create an instance of ChallengeInputDataTypesPage from a dict +challenge_input_data_types_page_form_dict = challenge_input_data_types_page.from_dict(challenge_input_data_types_page_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/libs/openchallenges/api-client-python/docs/ChallengePlatform.md b/libs/openchallenges/api-client-python/docs/ChallengePlatform.md new file mode 100644 index 0000000000..3b8ff61ac9 --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/ChallengePlatform.md @@ -0,0 +1,35 @@ +# ChallengePlatform + +A challenge platform + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **int** | The unique identifier of a challenge platform. | +**slug** | **str** | The slug of the challenge platform. | +**name** | **str** | The name of the challenge platform. | +**avatar_url** | **str** | | +**website_url** | **str** | | +**created_at** | **datetime** | | +**updated_at** | **datetime** | | + +## Example + +```python +from openchallenges_client.models.challenge_platform import ChallengePlatform + +# TODO update the JSON string below +json = "{}" +# create an instance of ChallengePlatform from a JSON string +challenge_platform_instance = ChallengePlatform.from_json(json) +# print the JSON string representation of the object +print ChallengePlatform.to_json() + +# convert the object into a dict +challenge_platform_dict = challenge_platform_instance.to_dict() +# create an instance of ChallengePlatform from a dict +challenge_platform_form_dict = challenge_platform.from_dict(challenge_platform_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/libs/openchallenges/api-client-python/docs/ChallengePlatformApi.md b/libs/openchallenges/api-client-python/docs/ChallengePlatformApi.md new file mode 100644 index 0000000000..f51d8f1e2f --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/ChallengePlatformApi.md @@ -0,0 +1,149 @@ +# openchallenges_client.ChallengePlatformApi + +All URIs are relative to *http://localhost/v1* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**get_challenge_platform**](ChallengePlatformApi.md#get_challenge_platform) | **GET** /challengePlatforms/{challengePlatformName} | Get a challenge platform +[**list_challenge_platforms**](ChallengePlatformApi.md#list_challenge_platforms) | **GET** /challengePlatforms | List challenge platforms + + +# **get_challenge_platform** +> ChallengePlatform get_challenge_platform(challenge_platform_name) + +Get a challenge platform + +Returns the challenge platform specified + +### Example + +```python +import time +import os +import openchallenges_client +from openchallenges_client.models.challenge_platform import ChallengePlatform +from openchallenges_client.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to http://localhost/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = openchallenges_client.Configuration( + host = "http://localhost/v1" +) + + +# Enter a context with an instance of the API client +with openchallenges_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = openchallenges_client.ChallengePlatformApi(api_client) + challenge_platform_name = 'challenge_platform_name_example' # str | The unique identifier of the challenge platform. + + try: + # Get a challenge platform + api_response = api_instance.get_challenge_platform(challenge_platform_name) + print("The response of ChallengePlatformApi->get_challenge_platform:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling ChallengePlatformApi->get_challenge_platform: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **challenge_platform_name** | **str**| The unique identifier of the challenge platform. | + +### Return type + +[**ChallengePlatform**](ChallengePlatform.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json, application/problem+json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Success | - | +**404** | The specified resource was not found | - | +**500** | The request cannot be fulfilled due to an unexpected server error | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **list_challenge_platforms** +> ChallengePlatformsPage list_challenge_platforms(challenge_platform_search_query=challenge_platform_search_query) + +List challenge platforms + +List challenge platforms + +### Example + +```python +import time +import os +import openchallenges_client +from openchallenges_client.models.challenge_platform_search_query import ChallengePlatformSearchQuery +from openchallenges_client.models.challenge_platforms_page import ChallengePlatformsPage +from openchallenges_client.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to http://localhost/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = openchallenges_client.Configuration( + host = "http://localhost/v1" +) + + +# Enter a context with an instance of the API client +with openchallenges_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = openchallenges_client.ChallengePlatformApi(api_client) + challenge_platform_search_query = openchallenges_client.ChallengePlatformSearchQuery() # ChallengePlatformSearchQuery | The search query used to find challenge platforms. (optional) + + try: + # List challenge platforms + api_response = api_instance.list_challenge_platforms(challenge_platform_search_query=challenge_platform_search_query) + print("The response of ChallengePlatformApi->list_challenge_platforms:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling ChallengePlatformApi->list_challenge_platforms: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **challenge_platform_search_query** | [**ChallengePlatformSearchQuery**](.md)| The search query used to find challenge platforms. | [optional] + +### Return type + +[**ChallengePlatformsPage**](ChallengePlatformsPage.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json, application/problem+json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Success | - | +**400** | Invalid request | - | +**500** | The request cannot be fulfilled due to an unexpected server error | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/libs/openchallenges/api-client-python/docs/ChallengePlatformDirection.md b/libs/openchallenges/api-client-python/docs/ChallengePlatformDirection.md new file mode 100644 index 0000000000..853fa23577 --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/ChallengePlatformDirection.md @@ -0,0 +1,11 @@ +# ChallengePlatformDirection + +The direction to sort the results by. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/libs/openchallenges/api-client-python/docs/ChallengePlatformSearchQuery.md b/libs/openchallenges/api-client-python/docs/ChallengePlatformSearchQuery.md new file mode 100644 index 0000000000..1b97bd77d4 --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/ChallengePlatformSearchQuery.md @@ -0,0 +1,33 @@ +# ChallengePlatformSearchQuery + +A challenge platform search query. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**page_number** | **int** | The page number. | [optional] [default to 0] +**page_size** | **int** | The number of items in a single page. | [optional] [default to 100] +**sort** | [**ChallengePlatformSort**](ChallengePlatformSort.md) | | [optional] +**direction** | [**ChallengePlatformDirection**](ChallengePlatformDirection.md) | | [optional] +**search_terms** | **str** | A string of search terms used to filter the results. | [optional] + +## Example + +```python +from openchallenges_client.models.challenge_platform_search_query import ChallengePlatformSearchQuery + +# TODO update the JSON string below +json = "{}" +# create an instance of ChallengePlatformSearchQuery from a JSON string +challenge_platform_search_query_instance = ChallengePlatformSearchQuery.from_json(json) +# print the JSON string representation of the object +print ChallengePlatformSearchQuery.to_json() + +# convert the object into a dict +challenge_platform_search_query_dict = challenge_platform_search_query_instance.to_dict() +# create an instance of ChallengePlatformSearchQuery from a dict +challenge_platform_search_query_form_dict = challenge_platform_search_query.from_dict(challenge_platform_search_query_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/libs/openchallenges/api-client-python/docs/ChallengePlatformSort.md b/libs/openchallenges/api-client-python/docs/ChallengePlatformSort.md new file mode 100644 index 0000000000..c4bf383782 --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/ChallengePlatformSort.md @@ -0,0 +1,11 @@ +# ChallengePlatformSort + +What to sort results by. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/libs/openchallenges/api-client-python/docs/ChallengePlatformsPage.md b/libs/openchallenges/api-client-python/docs/ChallengePlatformsPage.md new file mode 100644 index 0000000000..e60cad3d46 --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/ChallengePlatformsPage.md @@ -0,0 +1,35 @@ +# ChallengePlatformsPage + +A page of challenge platforms. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**number** | **int** | The page number. | +**size** | **int** | The number of items in a single page. | +**total_elements** | **int** | Total number of elements in the result set. | +**total_pages** | **int** | Total number of pages in the result set. | +**has_next** | **bool** | Returns if there is a next page. | +**has_previous** | **bool** | Returns if there is a previous page. | +**challenge_platforms** | [**List[ChallengePlatform]**](ChallengePlatform.md) | A list of challenge platforms. | + +## Example + +```python +from openchallenges_client.models.challenge_platforms_page import ChallengePlatformsPage + +# TODO update the JSON string below +json = "{}" +# create an instance of ChallengePlatformsPage from a JSON string +challenge_platforms_page_instance = ChallengePlatformsPage.from_json(json) +# print the JSON string representation of the object +print ChallengePlatformsPage.to_json() + +# convert the object into a dict +challenge_platforms_page_dict = challenge_platforms_page_instance.to_dict() +# create an instance of ChallengePlatformsPage from a dict +challenge_platforms_page_form_dict = challenge_platforms_page.from_dict(challenge_platforms_page_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/libs/openchallenges/api-client-python/docs/ChallengeSearchQuery.md b/libs/openchallenges/api-client-python/docs/ChallengeSearchQuery.md new file mode 100644 index 0000000000..b6c43f6fae --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/ChallengeSearchQuery.md @@ -0,0 +1,44 @@ +# ChallengeSearchQuery + +A challenge search query. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**page_number** | **int** | The page number. | [optional] [default to 0] +**page_size** | **int** | The number of items in a single page. | [optional] [default to 100] +**sort** | [**ChallengeSort**](ChallengeSort.md) | | [optional] +**sort_seed** | **int** | The seed that initializes the random sorter. | [optional] +**direction** | [**ChallengeDirection**](ChallengeDirection.md) | | [optional] +**difficulties** | [**List[ChallengeDifficulty]**](ChallengeDifficulty.md) | An array of challenge difficulty levels used to filter the results. | [optional] +**incentives** | [**List[ChallengeIncentive]**](ChallengeIncentive.md) | An array of challenge incentive types used to filter the results. | [optional] +**min_start_date** | **date** | Keep the challenges that start at this date or later. | [optional] +**max_start_date** | **date** | Keep the challenges that start at this date or sooner. | [optional] +**platforms** | **List[str]** | An array of challenge platform ids used to filter the results. | [optional] +**organizations** | **List[int]** | An array of organization ids used to filter the results. | [optional] +**input_data_types** | **List[str]** | An array of challenge input data type ids used to filter the results. | [optional] +**status** | [**List[ChallengeStatus]**](ChallengeStatus.md) | An array of challenge status used to filter the results. | [optional] +**submission_types** | [**List[ChallengeSubmissionType]**](ChallengeSubmissionType.md) | An array of challenge submission types used to filter the results. | [optional] +**categories** | [**List[ChallengeCategory]**](ChallengeCategory.md) | The array of challenge categories used to filter the results. | [optional] +**search_terms** | **str** | A string of search terms used to filter the results. | [optional] + +## Example + +```python +from openchallenges_client.models.challenge_search_query import ChallengeSearchQuery + +# TODO update the JSON string below +json = "{}" +# create an instance of ChallengeSearchQuery from a JSON string +challenge_search_query_instance = ChallengeSearchQuery.from_json(json) +# print the JSON string representation of the object +print ChallengeSearchQuery.to_json() + +# convert the object into a dict +challenge_search_query_dict = challenge_search_query_instance.to_dict() +# create an instance of ChallengeSearchQuery from a dict +challenge_search_query_form_dict = challenge_search_query.from_dict(challenge_search_query_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/libs/openchallenges/api-client-python/docs/ChallengeSort.md b/libs/openchallenges/api-client-python/docs/ChallengeSort.md new file mode 100644 index 0000000000..9cb4d0ad43 --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/ChallengeSort.md @@ -0,0 +1,11 @@ +# ChallengeSort + +What to sort results by. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/libs/openchallenges/api-client-python/docs/ChallengeStatus.md b/libs/openchallenges/api-client-python/docs/ChallengeStatus.md new file mode 100644 index 0000000000..b00264bd72 --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/ChallengeStatus.md @@ -0,0 +1,11 @@ +# ChallengeStatus + +The status of the challenge. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/libs/openchallenges/api-client-python/docs/ChallengeSubmissionType.md b/libs/openchallenges/api-client-python/docs/ChallengeSubmissionType.md new file mode 100644 index 0000000000..456867da44 --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/ChallengeSubmissionType.md @@ -0,0 +1,11 @@ +# ChallengeSubmissionType + +The submission type of the challenge. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/libs/openchallenges/api-client-python/docs/ChallengesPage.md b/libs/openchallenges/api-client-python/docs/ChallengesPage.md new file mode 100644 index 0000000000..3910a296e7 --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/ChallengesPage.md @@ -0,0 +1,35 @@ +# ChallengesPage + +A page of challenges. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**number** | **int** | The page number. | +**size** | **int** | The number of items in a single page. | +**total_elements** | **int** | Total number of elements in the result set. | +**total_pages** | **int** | Total number of pages in the result set. | +**has_next** | **bool** | Returns if there is a next page. | +**has_previous** | **bool** | Returns if there is a previous page. | +**challenges** | [**List[Challenge]**](Challenge.md) | A list of challenges. | + +## Example + +```python +from openchallenges_client.models.challenges_page import ChallengesPage + +# TODO update the JSON string below +json = "{}" +# create an instance of ChallengesPage from a JSON string +challenges_page_instance = ChallengesPage.from_json(json) +# print the JSON string representation of the object +print ChallengesPage.to_json() + +# convert the object into a dict +challenges_page_dict = challenges_page_instance.to_dict() +# create an instance of ChallengesPage from a dict +challenges_page_form_dict = challenges_page.from_dict(challenges_page_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/libs/openchallenges/api-client-python/docs/ChallengesPerYear.md b/libs/openchallenges/api-client-python/docs/ChallengesPerYear.md new file mode 100644 index 0000000000..aa7af19f50 --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/ChallengesPerYear.md @@ -0,0 +1,30 @@ +# ChallengesPerYear + +An object + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**years** | **List[str]** | | +**challenge_counts** | **List[int]** | | + +## Example + +```python +from openchallenges_client.models.challenges_per_year import ChallengesPerYear + +# TODO update the JSON string below +json = "{}" +# create an instance of ChallengesPerYear from a JSON string +challenges_per_year_instance = ChallengesPerYear.from_json(json) +# print the JSON string representation of the object +print ChallengesPerYear.to_json() + +# convert the object into a dict +challenges_per_year_dict = challenges_per_year_instance.to_dict() +# create an instance of ChallengesPerYear from a dict +challenges_per_year_form_dict = challenges_per_year.from_dict(challenges_per_year_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/libs/openchallenges/api-client-python/docs/Image.md b/libs/openchallenges/api-client-python/docs/Image.md new file mode 100644 index 0000000000..d68ccf148a --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/Image.md @@ -0,0 +1,29 @@ +# Image + +An image + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**url** | **str** | | + +## Example + +```python +from openchallenges_client.models.image import Image + +# TODO update the JSON string below +json = "{}" +# create an instance of Image from a JSON string +image_instance = Image.from_json(json) +# print the JSON string representation of the object +print Image.to_json() + +# convert the object into a dict +image_dict = image_instance.to_dict() +# create an instance of Image from a dict +image_form_dict = image.from_dict(image_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/libs/openchallenges/api-client-python/docs/ImageApi.md b/libs/openchallenges/api-client-python/docs/ImageApi.md new file mode 100644 index 0000000000..71237fa6d0 --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/ImageApi.md @@ -0,0 +1,79 @@ +# openchallenges_client.ImageApi + +All URIs are relative to *http://localhost/v1* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**get_image**](ImageApi.md#get_image) | **GET** /images | Get an image + + +# **get_image** +> Image get_image(image_query=image_query) + +Get an image + +Returns the image specified. + +### Example + +```python +import time +import os +import openchallenges_client +from openchallenges_client.models.image import Image +from openchallenges_client.models.image_query import ImageQuery +from openchallenges_client.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to http://localhost/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = openchallenges_client.Configuration( + host = "http://localhost/v1" +) + + +# Enter a context with an instance of the API client +with openchallenges_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = openchallenges_client.ImageApi(api_client) + image_query = openchallenges_client.ImageQuery() # ImageQuery | The query used to get an image. (optional) + + try: + # Get an image + api_response = api_instance.get_image(image_query=image_query) + print("The response of ImageApi->get_image:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling ImageApi->get_image: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **image_query** | [**ImageQuery**](.md)| The query used to get an image. | [optional] + +### Return type + +[**Image**](Image.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json, application/problem+json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | An image | - | +**404** | The specified resource was not found | - | +**500** | The request cannot be fulfilled due to an unexpected server error | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/libs/openchallenges/api-client-python/docs/ImageAspectRatio.md b/libs/openchallenges/api-client-python/docs/ImageAspectRatio.md new file mode 100644 index 0000000000..8753abefbb --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/ImageAspectRatio.md @@ -0,0 +1,11 @@ +# ImageAspectRatio + +The aspect ratio of the image (the height of the image must be specified). + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/libs/openchallenges/api-client-python/docs/ImageHeight.md b/libs/openchallenges/api-client-python/docs/ImageHeight.md new file mode 100644 index 0000000000..7946ffa473 --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/ImageHeight.md @@ -0,0 +1,11 @@ +# ImageHeight + +The height of the image. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/libs/openchallenges/api-client-python/docs/ImageQuery.md b/libs/openchallenges/api-client-python/docs/ImageQuery.md new file mode 100644 index 0000000000..ad6bd7b4c2 --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/ImageQuery.md @@ -0,0 +1,31 @@ +# ImageQuery + +An image query. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**object_key** | **str** | The unique identifier of the image. | +**height** | [**ImageHeight**](ImageHeight.md) | | [optional] +**aspect_ratio** | [**ImageAspectRatio**](ImageAspectRatio.md) | | [optional] + +## Example + +```python +from openchallenges_client.models.image_query import ImageQuery + +# TODO update the JSON string below +json = "{}" +# create an instance of ImageQuery from a JSON string +image_query_instance = ImageQuery.from_json(json) +# print the JSON string representation of the object +print ImageQuery.to_json() + +# convert the object into a dict +image_query_dict = image_query_instance.to_dict() +# create an instance of ImageQuery from a dict +image_query_form_dict = image_query.from_dict(image_query_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/libs/openchallenges/api-client-python/docs/Organization.md b/libs/openchallenges/api-client-python/docs/Organization.md new file mode 100644 index 0000000000..d5cc1f18c1 --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/Organization.md @@ -0,0 +1,39 @@ +# Organization + +An organization + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **int** | The unique identifier of an organization | +**name** | **str** | | +**email** | **str** | An email address. | +**login** | **str** | The login of an organization | +**description** | **str** | | +**avatar_key** | **str** | | [optional] +**website_url** | **str** | | +**challenge_count** | **int** | | [optional] +**created_at** | **datetime** | | +**updated_at** | **datetime** | | +**acronym** | **str** | | [optional] + +## Example + +```python +from openchallenges_client.models.organization import Organization + +# TODO update the JSON string below +json = "{}" +# create an instance of Organization from a JSON string +organization_instance = Organization.from_json(json) +# print the JSON string representation of the object +print Organization.to_json() + +# convert the object into a dict +organization_dict = organization_instance.to_dict() +# create an instance of Organization from a dict +organization_form_dict = organization.from_dict(organization_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/libs/openchallenges/api-client-python/docs/OrganizationApi.md b/libs/openchallenges/api-client-python/docs/OrganizationApi.md new file mode 100644 index 0000000000..1831bba5c9 --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/OrganizationApi.md @@ -0,0 +1,149 @@ +# openchallenges_client.OrganizationApi + +All URIs are relative to *http://localhost/v1* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**get_organization**](OrganizationApi.md#get_organization) | **GET** /organizations/{org} | Get an organization +[**list_organizations**](OrganizationApi.md#list_organizations) | **GET** /organizations | List organizations + + +# **get_organization** +> Organization get_organization(org) + +Get an organization + +Returns the organization specified + +### Example + +```python +import time +import os +import openchallenges_client +from openchallenges_client.models.organization import Organization +from openchallenges_client.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to http://localhost/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = openchallenges_client.Configuration( + host = "http://localhost/v1" +) + + +# Enter a context with an instance of the API client +with openchallenges_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = openchallenges_client.OrganizationApi(api_client) + org = 'dream' # str | The id or login of the organization. + + try: + # Get an organization + api_response = api_instance.get_organization(org) + print("The response of OrganizationApi->get_organization:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling OrganizationApi->get_organization: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **org** | **str**| The id or login of the organization. | + +### Return type + +[**Organization**](Organization.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json, application/problem+json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | An organization | - | +**404** | The specified resource was not found | - | +**500** | The request cannot be fulfilled due to an unexpected server error | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **list_organizations** +> OrganizationsPage list_organizations(organization_search_query=organization_search_query) + +List organizations + +List organizations + +### Example + +```python +import time +import os +import openchallenges_client +from openchallenges_client.models.organization_search_query import OrganizationSearchQuery +from openchallenges_client.models.organizations_page import OrganizationsPage +from openchallenges_client.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to http://localhost/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = openchallenges_client.Configuration( + host = "http://localhost/v1" +) + + +# Enter a context with an instance of the API client +with openchallenges_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = openchallenges_client.OrganizationApi(api_client) + organization_search_query = openchallenges_client.OrganizationSearchQuery() # OrganizationSearchQuery | The search query used to find organizations. (optional) + + try: + # List organizations + api_response = api_instance.list_organizations(organization_search_query=organization_search_query) + print("The response of OrganizationApi->list_organizations:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling OrganizationApi->list_organizations: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **organization_search_query** | [**OrganizationSearchQuery**](.md)| The search query used to find organizations. | [optional] + +### Return type + +[**OrganizationsPage**](OrganizationsPage.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json, application/problem+json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Success | - | +**400** | Invalid request | - | +**500** | The request cannot be fulfilled due to an unexpected server error | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/libs/openchallenges/api-client-python/docs/OrganizationCategory.md b/libs/openchallenges/api-client-python/docs/OrganizationCategory.md new file mode 100644 index 0000000000..2ab94c0908 --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/OrganizationCategory.md @@ -0,0 +1,11 @@ +# OrganizationCategory + +The category of the organization. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/libs/openchallenges/api-client-python/docs/OrganizationDirection.md b/libs/openchallenges/api-client-python/docs/OrganizationDirection.md new file mode 100644 index 0000000000..f87f29fb1d --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/OrganizationDirection.md @@ -0,0 +1,11 @@ +# OrganizationDirection + +The direction to sort the results by. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/libs/openchallenges/api-client-python/docs/OrganizationSearchQuery.md b/libs/openchallenges/api-client-python/docs/OrganizationSearchQuery.md new file mode 100644 index 0000000000..54779e061e --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/OrganizationSearchQuery.md @@ -0,0 +1,35 @@ +# OrganizationSearchQuery + +An organization search query. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**page_number** | **int** | The page number. | [optional] [default to 0] +**page_size** | **int** | The number of items in a single page. | [optional] [default to 100] +**categories** | [**List[OrganizationCategory]**](OrganizationCategory.md) | The array of organization categories used to filter the results. | [optional] +**challenge_contribution_roles** | [**List[ChallengeContributionRole]**](ChallengeContributionRole.md) | An array of challenge contribution roles used to filter the results. | [optional] +**sort** | [**OrganizationSort**](OrganizationSort.md) | | [optional] +**direction** | [**OrganizationDirection**](OrganizationDirection.md) | | [optional] +**search_terms** | **str** | A string of search terms used to filter the results. | [optional] + +## Example + +```python +from openchallenges_client.models.organization_search_query import OrganizationSearchQuery + +# TODO update the JSON string below +json = "{}" +# create an instance of OrganizationSearchQuery from a JSON string +organization_search_query_instance = OrganizationSearchQuery.from_json(json) +# print the JSON string representation of the object +print OrganizationSearchQuery.to_json() + +# convert the object into a dict +organization_search_query_dict = organization_search_query_instance.to_dict() +# create an instance of OrganizationSearchQuery from a dict +organization_search_query_form_dict = organization_search_query.from_dict(organization_search_query_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/libs/openchallenges/api-client-python/docs/OrganizationSort.md b/libs/openchallenges/api-client-python/docs/OrganizationSort.md new file mode 100644 index 0000000000..0672d5ba69 --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/OrganizationSort.md @@ -0,0 +1,11 @@ +# OrganizationSort + +What to sort results by. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/libs/openchallenges/api-client-python/docs/OrganizationsPage.md b/libs/openchallenges/api-client-python/docs/OrganizationsPage.md new file mode 100644 index 0000000000..b76197b219 --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/OrganizationsPage.md @@ -0,0 +1,35 @@ +# OrganizationsPage + +A page of organizations + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**number** | **int** | The page number. | +**size** | **int** | The number of items in a single page. | +**total_elements** | **int** | Total number of elements in the result set. | +**total_pages** | **int** | Total number of pages in the result set. | +**has_next** | **bool** | Returns if there is a next page. | +**has_previous** | **bool** | Returns if there is a previous page. | +**organizations** | [**List[Organization]**](Organization.md) | A list of organizations | + +## Example + +```python +from openchallenges_client.models.organizations_page import OrganizationsPage + +# TODO update the JSON string below +json = "{}" +# create an instance of OrganizationsPage from a JSON string +organizations_page_instance = OrganizationsPage.from_json(json) +# print the JSON string representation of the object +print OrganizationsPage.to_json() + +# convert the object into a dict +organizations_page_dict = organizations_page_instance.to_dict() +# create an instance of OrganizationsPage from a dict +organizations_page_form_dict = organizations_page.from_dict(organizations_page_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/libs/openchallenges/api-client-python/docs/PageMetadata.md b/libs/openchallenges/api-client-python/docs/PageMetadata.md new file mode 100644 index 0000000000..403c2f16ea --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/PageMetadata.md @@ -0,0 +1,34 @@ +# PageMetadata + +The metadata of a page. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**number** | **int** | The page number. | +**size** | **int** | The number of items in a single page. | +**total_elements** | **int** | Total number of elements in the result set. | +**total_pages** | **int** | Total number of pages in the result set. | +**has_next** | **bool** | Returns if there is a next page. | +**has_previous** | **bool** | Returns if there is a previous page. | + +## Example + +```python +from openchallenges_client.models.page_metadata import PageMetadata + +# TODO update the JSON string below +json = "{}" +# create an instance of PageMetadata from a JSON string +page_metadata_instance = PageMetadata.from_json(json) +# print the JSON string representation of the object +print PageMetadata.to_json() + +# convert the object into a dict +page_metadata_dict = page_metadata_instance.to_dict() +# create an instance of PageMetadata from a dict +page_metadata_form_dict = page_metadata.from_dict(page_metadata_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/libs/openchallenges/api-client-python/docs/SimpleChallengeInputDataType.md b/libs/openchallenges/api-client-python/docs/SimpleChallengeInputDataType.md new file mode 100644 index 0000000000..424a75489f --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/SimpleChallengeInputDataType.md @@ -0,0 +1,31 @@ +# SimpleChallengeInputDataType + +A simple challenge input data type. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **int** | The unique identifier of a challenge input data type. | +**slug** | **str** | The slug of the challenge input data type. | +**name** | **str** | The name of the challenge input data type. | + +## Example + +```python +from openchallenges_client.models.simple_challenge_input_data_type import SimpleChallengeInputDataType + +# TODO update the JSON string below +json = "{}" +# create an instance of SimpleChallengeInputDataType from a JSON string +simple_challenge_input_data_type_instance = SimpleChallengeInputDataType.from_json(json) +# print the JSON string representation of the object +print SimpleChallengeInputDataType.to_json() + +# convert the object into a dict +simple_challenge_input_data_type_dict = simple_challenge_input_data_type_instance.to_dict() +# create an instance of SimpleChallengeInputDataType from a dict +simple_challenge_input_data_type_form_dict = simple_challenge_input_data_type.from_dict(simple_challenge_input_data_type_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/libs/openchallenges/api-client-python/docs/SimpleChallengePlatform.md b/libs/openchallenges/api-client-python/docs/SimpleChallengePlatform.md new file mode 100644 index 0000000000..a882c3aaa1 --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/SimpleChallengePlatform.md @@ -0,0 +1,31 @@ +# SimpleChallengePlatform + +A simple challenge platform. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **int** | The unique identifier of a challenge platform. | +**slug** | **str** | The slug of the challenge platform. | +**name** | **str** | The name of the challenge platform. | + +## Example + +```python +from openchallenges_client.models.simple_challenge_platform import SimpleChallengePlatform + +# TODO update the JSON string below +json = "{}" +# create an instance of SimpleChallengePlatform from a JSON string +simple_challenge_platform_instance = SimpleChallengePlatform.from_json(json) +# print the JSON string representation of the object +print SimpleChallengePlatform.to_json() + +# convert the object into a dict +simple_challenge_platform_dict = simple_challenge_platform_instance.to_dict() +# create an instance of SimpleChallengePlatform from a dict +simple_challenge_platform_form_dict = simple_challenge_platform.from_dict(simple_challenge_platform_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/libs/openchallenges/api-client-python/docs/User.md b/libs/openchallenges/api-client-python/docs/User.md new file mode 100644 index 0000000000..5d023938fa --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/User.md @@ -0,0 +1,38 @@ +# User + +A simple user + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **int** | The unique identifier of an account | [optional] +**login** | **str** | | +**email** | **str** | An email address. | +**name** | **str** | | [optional] +**status** | [**UserStatus**](UserStatus.md) | | [optional] +**avatar_url** | **str** | | [optional] +**created_at** | **datetime** | | +**updated_at** | **datetime** | | +**type** | **str** | | +**bio** | **str** | | [optional] + +## Example + +```python +from openchallenges_client.models.user import User + +# TODO update the JSON string below +json = "{}" +# create an instance of User from a JSON string +user_instance = User.from_json(json) +# print the JSON string representation of the object +print User.to_json() + +# convert the object into a dict +user_dict = user_instance.to_dict() +# create an instance of User from a dict +user_form_dict = user.from_dict(user_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/libs/openchallenges/api-client-python/docs/UserApi.md b/libs/openchallenges/api-client-python/docs/UserApi.md new file mode 100644 index 0000000000..e51810b53f --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/UserApi.md @@ -0,0 +1,291 @@ +# openchallenges_client.UserApi + +All URIs are relative to *http://localhost/v1* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**create_user**](UserApi.md#create_user) | **POST** /users/register | Create a user +[**delete_user**](UserApi.md#delete_user) | **DELETE** /users/{userId} | Delete a user +[**get_user**](UserApi.md#get_user) | **GET** /users/{userId} | Get a user +[**list_users**](UserApi.md#list_users) | **GET** /users | Get all users + + +# **create_user** +> UserCreateResponse create_user(user_create_request) + +Create a user + +Create a user with the specified account name + +### Example + +```python +import time +import os +import openchallenges_client +from openchallenges_client.models.user_create_request import UserCreateRequest +from openchallenges_client.models.user_create_response import UserCreateResponse +from openchallenges_client.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to http://localhost/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = openchallenges_client.Configuration( + host = "http://localhost/v1" +) + + +# Enter a context with an instance of the API client +with openchallenges_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = openchallenges_client.UserApi(api_client) + user_create_request = openchallenges_client.UserCreateRequest() # UserCreateRequest | + + try: + # Create a user + api_response = api_instance.create_user(user_create_request) + print("The response of UserApi->create_user:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling UserApi->create_user: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **user_create_request** | [**UserCreateRequest**](UserCreateRequest.md)| | + +### Return type + +[**UserCreateResponse**](UserCreateResponse.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json, application/problem+json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**201** | Account created | - | +**400** | Invalid request | - | +**409** | The request conflicts with current state of the target resource | - | +**500** | The request cannot be fulfilled due to an unexpected server error | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **delete_user** +> object delete_user(user_id) + +Delete a user + +Deletes the user specified + +### Example + +```python +import time +import os +import openchallenges_client +from openchallenges_client.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to http://localhost/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = openchallenges_client.Configuration( + host = "http://localhost/v1" +) + + +# Enter a context with an instance of the API client +with openchallenges_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = openchallenges_client.UserApi(api_client) + user_id = 56 # int | The unique identifier of the user, either the user account ID or login + + try: + # Delete a user + api_response = api_instance.delete_user(user_id) + print("The response of UserApi->delete_user:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling UserApi->delete_user: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **user_id** | **int**| The unique identifier of the user, either the user account ID or login | + +### Return type + +**object** + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json, application/problem+json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Deleted | - | +**400** | The specified resource was not found | - | +**500** | The request cannot be fulfilled due to an unexpected server error | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_user** +> User get_user(user_id) + +Get a user + +Returns the user specified + +### Example + +```python +import time +import os +import openchallenges_client +from openchallenges_client.models.user import User +from openchallenges_client.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to http://localhost/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = openchallenges_client.Configuration( + host = "http://localhost/v1" +) + + +# Enter a context with an instance of the API client +with openchallenges_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = openchallenges_client.UserApi(api_client) + user_id = 56 # int | The unique identifier of the user, either the user account ID or login + + try: + # Get a user + api_response = api_instance.get_user(user_id) + print("The response of UserApi->get_user:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling UserApi->get_user: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **user_id** | **int**| The unique identifier of the user, either the user account ID or login | + +### Return type + +[**User**](User.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json, application/problem+json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | A user | - | +**404** | The specified resource was not found | - | +**500** | The request cannot be fulfilled due to an unexpected server error | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **list_users** +> UsersPage list_users(page_number=page_number, page_size=page_size) + +Get all users + +Returns the users + +### Example + +```python +import time +import os +import openchallenges_client +from openchallenges_client.models.users_page import UsersPage +from openchallenges_client.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to http://localhost/v1 +# See configuration.py for a list of all supported configuration parameters. +configuration = openchallenges_client.Configuration( + host = "http://localhost/v1" +) + + +# Enter a context with an instance of the API client +with openchallenges_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = openchallenges_client.UserApi(api_client) + page_number = 0 # int | The page number. (optional) (default to 0) + page_size = 100 # int | The number of items in a single page. (optional) (default to 100) + + try: + # Get all users + api_response = api_instance.list_users(page_number=page_number, page_size=page_size) + print("The response of UserApi->list_users:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling UserApi->list_users: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **page_number** | **int**| The page number. | [optional] [default to 0] + **page_size** | **int**| The number of items in a single page. | [optional] [default to 100] + +### Return type + +[**UsersPage**](UsersPage.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json, application/problem+json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Success | - | +**400** | Invalid request | - | +**500** | The request cannot be fulfilled due to an unexpected server error | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/libs/openchallenges/api-client-python/docs/UserCreateRequest.md b/libs/openchallenges/api-client-python/docs/UserCreateRequest.md new file mode 100644 index 0000000000..4c537a0855 --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/UserCreateRequest.md @@ -0,0 +1,34 @@ +# UserCreateRequest + +The information required to create a user account + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**login** | **str** | | +**email** | **str** | An email address. | +**password** | **str** | | +**name** | **str** | | [optional] +**avatar_url** | **str** | | [optional] +**bio** | **str** | | [optional] + +## Example + +```python +from openchallenges_client.models.user_create_request import UserCreateRequest + +# TODO update the JSON string below +json = "{}" +# create an instance of UserCreateRequest from a JSON string +user_create_request_instance = UserCreateRequest.from_json(json) +# print the JSON string representation of the object +print UserCreateRequest.to_json() + +# convert the object into a dict +user_create_request_dict = user_create_request_instance.to_dict() +# create an instance of UserCreateRequest from a dict +user_create_request_form_dict = user_create_request.from_dict(user_create_request_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/libs/openchallenges/api-client-python/docs/UserCreateResponse.md b/libs/openchallenges/api-client-python/docs/UserCreateResponse.md new file mode 100644 index 0000000000..db9c3ecbb6 --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/UserCreateResponse.md @@ -0,0 +1,29 @@ +# UserCreateResponse + +The response returned after the creation of the user + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **int** | The unique identifier of an account | + +## Example + +```python +from openchallenges_client.models.user_create_response import UserCreateResponse + +# TODO update the JSON string below +json = "{}" +# create an instance of UserCreateResponse from a JSON string +user_create_response_instance = UserCreateResponse.from_json(json) +# print the JSON string representation of the object +print UserCreateResponse.to_json() + +# convert the object into a dict +user_create_response_dict = user_create_response_instance.to_dict() +# create an instance of UserCreateResponse from a dict +user_create_response_form_dict = user_create_response.from_dict(user_create_response_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/libs/openchallenges/api-client-python/docs/UserStatus.md b/libs/openchallenges/api-client-python/docs/UserStatus.md new file mode 100644 index 0000000000..38c3faef1d --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/UserStatus.md @@ -0,0 +1,11 @@ +# UserStatus + +The account status of a user + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/libs/openchallenges/api-client-python/docs/UsersPage.md b/libs/openchallenges/api-client-python/docs/UsersPage.md new file mode 100644 index 0000000000..016206a982 --- /dev/null +++ b/libs/openchallenges/api-client-python/docs/UsersPage.md @@ -0,0 +1,35 @@ +# UsersPage + +A page of users + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**number** | **int** | The page number. | +**size** | **int** | The number of items in a single page. | +**total_elements** | **int** | Total number of elements in the result set. | +**total_pages** | **int** | Total number of pages in the result set. | +**has_next** | **bool** | Returns if there is a next page. | +**has_previous** | **bool** | Returns if there is a previous page. | +**users** | [**List[User]**](User.md) | A list of users | + +## Example + +```python +from openchallenges_client.models.users_page import UsersPage + +# TODO update the JSON string below +json = "{}" +# create an instance of UsersPage from a JSON string +users_page_instance = UsersPage.from_json(json) +# print the JSON string representation of the object +print UsersPage.to_json() + +# convert the object into a dict +users_page_dict = users_page_instance.to_dict() +# create an instance of UsersPage from a dict +users_page_form_dict = users_page.from_dict(users_page_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/libs/openchallenges/api-client-python/openapitools.json b/libs/openchallenges/api-client-python/openapitools.json new file mode 100644 index 0000000000..d00ef2bc60 --- /dev/null +++ b/libs/openchallenges/api-client-python/openapitools.json @@ -0,0 +1,17 @@ +{ + "$schema": "../../../node_modules/@openapitools/openapi-generator-cli/config.schema.json", + "spaces": 2, + "generator-cli": { + "version": "7.0.0", + "generators": { + "api-client-python": { + "generatorName": "python", + "inputSpec": "#{cwd}/../api-description/build/openapi.yaml", + "output": "#{cwd}/", + "additionalProperties": { + "packageName": "openchallenges_client" + } + } + } + } +} diff --git a/libs/openchallenges/api-client-python/openchallenges_client/__init__.py b/libs/openchallenges/api-client-python/openchallenges_client/__init__.py new file mode 100644 index 0000000000..88ad72702f --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/__init__.py @@ -0,0 +1,83 @@ +# coding: utf-8 + +# flake8: noqa + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +__version__ = "1.0.0" + +# import apis into sdk package +from openchallenges_client.api.challenge_api import ChallengeApi +from openchallenges_client.api.challenge_analytics_api import ChallengeAnalyticsApi +from openchallenges_client.api.challenge_contribution_api import ChallengeContributionApi +from openchallenges_client.api.challenge_input_data_type_api import ChallengeInputDataTypeApi +from openchallenges_client.api.challenge_platform_api import ChallengePlatformApi +from openchallenges_client.api.image_api import ImageApi +from openchallenges_client.api.organization_api import OrganizationApi +from openchallenges_client.api.user_api import UserApi + +# import ApiClient +from openchallenges_client.api_response import ApiResponse +from openchallenges_client.api_client import ApiClient +from openchallenges_client.configuration import Configuration +from openchallenges_client.exceptions import OpenApiException +from openchallenges_client.exceptions import ApiTypeError +from openchallenges_client.exceptions import ApiValueError +from openchallenges_client.exceptions import ApiKeyError +from openchallenges_client.exceptions import ApiAttributeError +from openchallenges_client.exceptions import ApiException + +# import models into sdk package +from openchallenges_client.models.basic_error import BasicError +from openchallenges_client.models.challenge import Challenge +from openchallenges_client.models.challenge_category import ChallengeCategory +from openchallenges_client.models.challenge_contribution import ChallengeContribution +from openchallenges_client.models.challenge_contribution_role import ChallengeContributionRole +from openchallenges_client.models.challenge_contributions_page import ChallengeContributionsPage +from openchallenges_client.models.challenge_difficulty import ChallengeDifficulty +from openchallenges_client.models.challenge_direction import ChallengeDirection +from openchallenges_client.models.challenge_incentive import ChallengeIncentive +from openchallenges_client.models.challenge_input_data_type import ChallengeInputDataType +from openchallenges_client.models.challenge_input_data_type_direction import ChallengeInputDataTypeDirection +from openchallenges_client.models.challenge_input_data_type_search_query import ChallengeInputDataTypeSearchQuery +from openchallenges_client.models.challenge_input_data_type_sort import ChallengeInputDataTypeSort +from openchallenges_client.models.challenge_input_data_types_page import ChallengeInputDataTypesPage +from openchallenges_client.models.challenge_platform import ChallengePlatform +from openchallenges_client.models.challenge_platform_direction import ChallengePlatformDirection +from openchallenges_client.models.challenge_platform_search_query import ChallengePlatformSearchQuery +from openchallenges_client.models.challenge_platform_sort import ChallengePlatformSort +from openchallenges_client.models.challenge_platforms_page import ChallengePlatformsPage +from openchallenges_client.models.challenge_search_query import ChallengeSearchQuery +from openchallenges_client.models.challenge_sort import ChallengeSort +from openchallenges_client.models.challenge_status import ChallengeStatus +from openchallenges_client.models.challenge_submission_type import ChallengeSubmissionType +from openchallenges_client.models.challenges_page import ChallengesPage +from openchallenges_client.models.challenges_per_year import ChallengesPerYear +from openchallenges_client.models.image import Image +from openchallenges_client.models.image_aspect_ratio import ImageAspectRatio +from openchallenges_client.models.image_height import ImageHeight +from openchallenges_client.models.image_query import ImageQuery +from openchallenges_client.models.organization import Organization +from openchallenges_client.models.organization_category import OrganizationCategory +from openchallenges_client.models.organization_direction import OrganizationDirection +from openchallenges_client.models.organization_search_query import OrganizationSearchQuery +from openchallenges_client.models.organization_sort import OrganizationSort +from openchallenges_client.models.organizations_page import OrganizationsPage +from openchallenges_client.models.page_metadata import PageMetadata +from openchallenges_client.models.simple_challenge_input_data_type import SimpleChallengeInputDataType +from openchallenges_client.models.simple_challenge_platform import SimpleChallengePlatform +from openchallenges_client.models.user import User +from openchallenges_client.models.user_create_request import UserCreateRequest +from openchallenges_client.models.user_create_response import UserCreateResponse +from openchallenges_client.models.user_status import UserStatus +from openchallenges_client.models.users_page import UsersPage diff --git a/libs/openchallenges/api-client-python/openchallenges_client/api/__init__.py b/libs/openchallenges/api-client-python/openchallenges_client/api/__init__.py new file mode 100644 index 0000000000..9e1248bd78 --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/api/__init__.py @@ -0,0 +1,12 @@ +# flake8: noqa + +# import apis into api package +from openchallenges_client.api.challenge_api import ChallengeApi +from openchallenges_client.api.challenge_analytics_api import ChallengeAnalyticsApi +from openchallenges_client.api.challenge_contribution_api import ChallengeContributionApi +from openchallenges_client.api.challenge_input_data_type_api import ChallengeInputDataTypeApi +from openchallenges_client.api.challenge_platform_api import ChallengePlatformApi +from openchallenges_client.api.image_api import ImageApi +from openchallenges_client.api.organization_api import OrganizationApi +from openchallenges_client.api.user_api import UserApi + diff --git a/libs/openchallenges/api-client-python/openchallenges_client/api/challenge_analytics_api.py b/libs/openchallenges/api-client-python/openchallenges_client/api/challenge_analytics_api.py new file mode 100644 index 0000000000..cbec360b43 --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/api/challenge_analytics_api.py @@ -0,0 +1,174 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import re # noqa: F401 +import io +import warnings + +from pydantic import validate_arguments, ValidationError +from typing_extensions import Annotated + +from openchallenges_client.models.challenges_per_year import ChallengesPerYear + +from openchallenges_client.api_client import ApiClient +from openchallenges_client.api_response import ApiResponse +from openchallenges_client.exceptions import ( # noqa: F401 + ApiTypeError, + ApiValueError +) + + +class ChallengeAnalyticsApi(object): + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient.get_default() + self.api_client = api_client + + @validate_arguments + def get_challenges_per_year(self, **kwargs) -> ChallengesPerYear: # noqa: E501 + """Get the number of challenges tracked per year # noqa: E501 + + Returns the number of challenges tracked per year # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_challenges_per_year(async_req=True) + >>> result = thread.get() + + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: ChallengesPerYear + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + raise ValueError("Error! Please call the get_challenges_per_year_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data") + return self.get_challenges_per_year_with_http_info(**kwargs) # noqa: E501 + + @validate_arguments + def get_challenges_per_year_with_http_info(self, **kwargs) -> ApiResponse: # noqa: E501 + """Get the number of challenges tracked per year # noqa: E501 + + Returns the number of challenges tracked per year # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_challenges_per_year_with_http_info(async_req=True) + >>> result = thread.get() + + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(ChallengesPerYear, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method get_challenges_per_year" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json', 'application/problem+json']) # noqa: E501 + + # authentication setting + _auth_settings = [] # noqa: E501 + + _response_types_map = { + '200': "ChallengesPerYear", + '500': "BasicError", + } + + return self.api_client.call_api( + '/challengeAnalytics/challengesPerYear', 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) diff --git a/libs/openchallenges/api-client-python/openchallenges_client/api/challenge_api.py b/libs/openchallenges/api-client-python/openchallenges_client/api/challenge_api.py new file mode 100644 index 0000000000..6dfb692df5 --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/api/challenge_api.py @@ -0,0 +1,330 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import re # noqa: F401 +import io +import warnings + +from pydantic import validate_arguments, ValidationError +from typing_extensions import Annotated + +from pydantic import Field, StrictInt + +from typing import Optional + +from openchallenges_client.models.challenge import Challenge +from openchallenges_client.models.challenge_search_query import ChallengeSearchQuery +from openchallenges_client.models.challenges_page import ChallengesPage + +from openchallenges_client.api_client import ApiClient +from openchallenges_client.api_response import ApiResponse +from openchallenges_client.exceptions import ( # noqa: F401 + ApiTypeError, + ApiValueError +) + + +class ChallengeApi(object): + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient.get_default() + self.api_client = api_client + + @validate_arguments + def get_challenge(self, challenge_id : Annotated[StrictInt, Field(..., description="The unique identifier of the challenge.")], **kwargs) -> Challenge: # noqa: E501 + """Get a challenge # noqa: E501 + + Returns the challenge specified # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_challenge(challenge_id, async_req=True) + >>> result = thread.get() + + :param challenge_id: The unique identifier of the challenge. (required) + :type challenge_id: int + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: Challenge + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + raise ValueError("Error! Please call the get_challenge_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data") + return self.get_challenge_with_http_info(challenge_id, **kwargs) # noqa: E501 + + @validate_arguments + def get_challenge_with_http_info(self, challenge_id : Annotated[StrictInt, Field(..., description="The unique identifier of the challenge.")], **kwargs) -> ApiResponse: # noqa: E501 + """Get a challenge # noqa: E501 + + Returns the challenge specified # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_challenge_with_http_info(challenge_id, async_req=True) + >>> result = thread.get() + + :param challenge_id: The unique identifier of the challenge. (required) + :type challenge_id: int + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(Challenge, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'challenge_id' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method get_challenge" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['challenge_id']: + _path_params['challengeId'] = _params['challenge_id'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json', 'application/problem+json']) # noqa: E501 + + # authentication setting + _auth_settings = [] # noqa: E501 + + _response_types_map = { + '200': "Challenge", + '404': "BasicError", + '500': "BasicError", + } + + return self.api_client.call_api( + '/challenges/{challengeId}', 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def list_challenges(self, challenge_search_query : Annotated[Optional[ChallengeSearchQuery], Field(description="The search query used to find challenges.")] = None, **kwargs) -> ChallengesPage: # noqa: E501 + """List challenges # noqa: E501 + + List challenges # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.list_challenges(challenge_search_query, async_req=True) + >>> result = thread.get() + + :param challenge_search_query: The search query used to find challenges. + :type challenge_search_query: ChallengeSearchQuery + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: ChallengesPage + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + raise ValueError("Error! Please call the list_challenges_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data") + return self.list_challenges_with_http_info(challenge_search_query, **kwargs) # noqa: E501 + + @validate_arguments + def list_challenges_with_http_info(self, challenge_search_query : Annotated[Optional[ChallengeSearchQuery], Field(description="The search query used to find challenges.")] = None, **kwargs) -> ApiResponse: # noqa: E501 + """List challenges # noqa: E501 + + List challenges # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.list_challenges_with_http_info(challenge_search_query, async_req=True) + >>> result = thread.get() + + :param challenge_search_query: The search query used to find challenges. + :type challenge_search_query: ChallengeSearchQuery + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(ChallengesPage, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'challenge_search_query' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method list_challenges" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + + # process the query parameters + _query_params = [] + if _params.get('challenge_search_query') is not None: # noqa: E501 + _query_params.append(('challengeSearchQuery', _params['challenge_search_query'])) + + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json', 'application/problem+json']) # noqa: E501 + + # authentication setting + _auth_settings = [] # noqa: E501 + + _response_types_map = { + '200': "ChallengesPage", + '400': "BasicError", + '500': "BasicError", + } + + return self.api_client.call_api( + '/challenges', 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) diff --git a/libs/openchallenges/api-client-python/openchallenges_client/api/challenge_contribution_api.py b/libs/openchallenges/api-client-python/openchallenges_client/api/challenge_contribution_api.py new file mode 100644 index 0000000000..546bd5659d --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/api/challenge_contribution_api.py @@ -0,0 +1,185 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import re # noqa: F401 +import io +import warnings + +from pydantic import validate_arguments, ValidationError +from typing_extensions import Annotated + +from pydantic import Field, StrictInt + +from openchallenges_client.models.challenge_contributions_page import ChallengeContributionsPage + +from openchallenges_client.api_client import ApiClient +from openchallenges_client.api_response import ApiResponse +from openchallenges_client.exceptions import ( # noqa: F401 + ApiTypeError, + ApiValueError +) + + +class ChallengeContributionApi(object): + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient.get_default() + self.api_client = api_client + + @validate_arguments + def list_challenge_contributions(self, challenge_id : Annotated[StrictInt, Field(..., description="The unique identifier of the challenge.")], **kwargs) -> ChallengeContributionsPage: # noqa: E501 + """List challenge contributions # noqa: E501 + + List challenge contributions # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.list_challenge_contributions(challenge_id, async_req=True) + >>> result = thread.get() + + :param challenge_id: The unique identifier of the challenge. (required) + :type challenge_id: int + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: ChallengeContributionsPage + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + raise ValueError("Error! Please call the list_challenge_contributions_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data") + return self.list_challenge_contributions_with_http_info(challenge_id, **kwargs) # noqa: E501 + + @validate_arguments + def list_challenge_contributions_with_http_info(self, challenge_id : Annotated[StrictInt, Field(..., description="The unique identifier of the challenge.")], **kwargs) -> ApiResponse: # noqa: E501 + """List challenge contributions # noqa: E501 + + List challenge contributions # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.list_challenge_contributions_with_http_info(challenge_id, async_req=True) + >>> result = thread.get() + + :param challenge_id: The unique identifier of the challenge. (required) + :type challenge_id: int + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(ChallengeContributionsPage, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'challenge_id' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method list_challenge_contributions" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['challenge_id']: + _path_params['challengeId'] = _params['challenge_id'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json', 'application/problem+json']) # noqa: E501 + + # authentication setting + _auth_settings = [] # noqa: E501 + + _response_types_map = { + '200': "ChallengeContributionsPage", + '400': "BasicError", + '500': "BasicError", + } + + return self.api_client.call_api( + '/challenges/{challengeId}/contributions', 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) diff --git a/libs/openchallenges/api-client-python/openchallenges_client/api/challenge_input_data_type_api.py b/libs/openchallenges/api-client-python/openchallenges_client/api/challenge_input_data_type_api.py new file mode 100644 index 0000000000..a4adbe2010 --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/api/challenge_input_data_type_api.py @@ -0,0 +1,188 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import re # noqa: F401 +import io +import warnings + +from pydantic import validate_arguments, ValidationError +from typing_extensions import Annotated + +from pydantic import Field + +from typing import Optional + +from openchallenges_client.models.challenge_input_data_type_search_query import ChallengeInputDataTypeSearchQuery +from openchallenges_client.models.challenge_input_data_types_page import ChallengeInputDataTypesPage + +from openchallenges_client.api_client import ApiClient +from openchallenges_client.api_response import ApiResponse +from openchallenges_client.exceptions import ( # noqa: F401 + ApiTypeError, + ApiValueError +) + + +class ChallengeInputDataTypeApi(object): + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient.get_default() + self.api_client = api_client + + @validate_arguments + def list_challenge_input_data_types(self, challenge_input_data_type_search_query : Annotated[Optional[ChallengeInputDataTypeSearchQuery], Field(description="The search query used to find challenge input data types.")] = None, **kwargs) -> ChallengeInputDataTypesPage: # noqa: E501 + """List challenge input data types # noqa: E501 + + List challenge input data types # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.list_challenge_input_data_types(challenge_input_data_type_search_query, async_req=True) + >>> result = thread.get() + + :param challenge_input_data_type_search_query: The search query used to find challenge input data types. + :type challenge_input_data_type_search_query: ChallengeInputDataTypeSearchQuery + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: ChallengeInputDataTypesPage + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + raise ValueError("Error! Please call the list_challenge_input_data_types_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data") + return self.list_challenge_input_data_types_with_http_info(challenge_input_data_type_search_query, **kwargs) # noqa: E501 + + @validate_arguments + def list_challenge_input_data_types_with_http_info(self, challenge_input_data_type_search_query : Annotated[Optional[ChallengeInputDataTypeSearchQuery], Field(description="The search query used to find challenge input data types.")] = None, **kwargs) -> ApiResponse: # noqa: E501 + """List challenge input data types # noqa: E501 + + List challenge input data types # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.list_challenge_input_data_types_with_http_info(challenge_input_data_type_search_query, async_req=True) + >>> result = thread.get() + + :param challenge_input_data_type_search_query: The search query used to find challenge input data types. + :type challenge_input_data_type_search_query: ChallengeInputDataTypeSearchQuery + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(ChallengeInputDataTypesPage, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'challenge_input_data_type_search_query' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method list_challenge_input_data_types" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + + # process the query parameters + _query_params = [] + if _params.get('challenge_input_data_type_search_query') is not None: # noqa: E501 + _query_params.append(('challengeInputDataTypeSearchQuery', _params['challenge_input_data_type_search_query'])) + + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json', 'application/problem+json']) # noqa: E501 + + # authentication setting + _auth_settings = [] # noqa: E501 + + _response_types_map = { + '200': "ChallengeInputDataTypesPage", + '400': "BasicError", + '500': "BasicError", + } + + return self.api_client.call_api( + '/challengeInputDataTypes', 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) diff --git a/libs/openchallenges/api-client-python/openchallenges_client/api/challenge_platform_api.py b/libs/openchallenges/api-client-python/openchallenges_client/api/challenge_platform_api.py new file mode 100644 index 0000000000..7e9dc0a7a6 --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/api/challenge_platform_api.py @@ -0,0 +1,330 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import re # noqa: F401 +import io +import warnings + +from pydantic import validate_arguments, ValidationError +from typing_extensions import Annotated + +from pydantic import Field, constr + +from typing import Optional + +from openchallenges_client.models.challenge_platform import ChallengePlatform +from openchallenges_client.models.challenge_platform_search_query import ChallengePlatformSearchQuery +from openchallenges_client.models.challenge_platforms_page import ChallengePlatformsPage + +from openchallenges_client.api_client import ApiClient +from openchallenges_client.api_response import ApiResponse +from openchallenges_client.exceptions import ( # noqa: F401 + ApiTypeError, + ApiValueError +) + + +class ChallengePlatformApi(object): + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient.get_default() + self.api_client = api_client + + @validate_arguments + def get_challenge_platform(self, challenge_platform_name : Annotated[constr(strict=True, max_length=30, min_length=3), Field(..., description="The unique identifier of the challenge platform.")], **kwargs) -> ChallengePlatform: # noqa: E501 + """Get a challenge platform # noqa: E501 + + Returns the challenge platform specified # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_challenge_platform(challenge_platform_name, async_req=True) + >>> result = thread.get() + + :param challenge_platform_name: The unique identifier of the challenge platform. (required) + :type challenge_platform_name: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: ChallengePlatform + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + raise ValueError("Error! Please call the get_challenge_platform_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data") + return self.get_challenge_platform_with_http_info(challenge_platform_name, **kwargs) # noqa: E501 + + @validate_arguments + def get_challenge_platform_with_http_info(self, challenge_platform_name : Annotated[constr(strict=True, max_length=30, min_length=3), Field(..., description="The unique identifier of the challenge platform.")], **kwargs) -> ApiResponse: # noqa: E501 + """Get a challenge platform # noqa: E501 + + Returns the challenge platform specified # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_challenge_platform_with_http_info(challenge_platform_name, async_req=True) + >>> result = thread.get() + + :param challenge_platform_name: The unique identifier of the challenge platform. (required) + :type challenge_platform_name: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(ChallengePlatform, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'challenge_platform_name' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method get_challenge_platform" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['challenge_platform_name']: + _path_params['challengePlatformName'] = _params['challenge_platform_name'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json', 'application/problem+json']) # noqa: E501 + + # authentication setting + _auth_settings = [] # noqa: E501 + + _response_types_map = { + '200': "ChallengePlatform", + '404': "BasicError", + '500': "BasicError", + } + + return self.api_client.call_api( + '/challengePlatforms/{challengePlatformName}', 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def list_challenge_platforms(self, challenge_platform_search_query : Annotated[Optional[ChallengePlatformSearchQuery], Field(description="The search query used to find challenge platforms.")] = None, **kwargs) -> ChallengePlatformsPage: # noqa: E501 + """List challenge platforms # noqa: E501 + + List challenge platforms # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.list_challenge_platforms(challenge_platform_search_query, async_req=True) + >>> result = thread.get() + + :param challenge_platform_search_query: The search query used to find challenge platforms. + :type challenge_platform_search_query: ChallengePlatformSearchQuery + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: ChallengePlatformsPage + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + raise ValueError("Error! Please call the list_challenge_platforms_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data") + return self.list_challenge_platforms_with_http_info(challenge_platform_search_query, **kwargs) # noqa: E501 + + @validate_arguments + def list_challenge_platforms_with_http_info(self, challenge_platform_search_query : Annotated[Optional[ChallengePlatformSearchQuery], Field(description="The search query used to find challenge platforms.")] = None, **kwargs) -> ApiResponse: # noqa: E501 + """List challenge platforms # noqa: E501 + + List challenge platforms # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.list_challenge_platforms_with_http_info(challenge_platform_search_query, async_req=True) + >>> result = thread.get() + + :param challenge_platform_search_query: The search query used to find challenge platforms. + :type challenge_platform_search_query: ChallengePlatformSearchQuery + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(ChallengePlatformsPage, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'challenge_platform_search_query' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method list_challenge_platforms" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + + # process the query parameters + _query_params = [] + if _params.get('challenge_platform_search_query') is not None: # noqa: E501 + _query_params.append(('challengePlatformSearchQuery', _params['challenge_platform_search_query'])) + + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json', 'application/problem+json']) # noqa: E501 + + # authentication setting + _auth_settings = [] # noqa: E501 + + _response_types_map = { + '200': "ChallengePlatformsPage", + '400': "BasicError", + '500': "BasicError", + } + + return self.api_client.call_api( + '/challengePlatforms', 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) diff --git a/libs/openchallenges/api-client-python/openchallenges_client/api/image_api.py b/libs/openchallenges/api-client-python/openchallenges_client/api/image_api.py new file mode 100644 index 0000000000..0aa7d1844e --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/api/image_api.py @@ -0,0 +1,188 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import re # noqa: F401 +import io +import warnings + +from pydantic import validate_arguments, ValidationError +from typing_extensions import Annotated + +from pydantic import Field + +from typing import Optional + +from openchallenges_client.models.image import Image +from openchallenges_client.models.image_query import ImageQuery + +from openchallenges_client.api_client import ApiClient +from openchallenges_client.api_response import ApiResponse +from openchallenges_client.exceptions import ( # noqa: F401 + ApiTypeError, + ApiValueError +) + + +class ImageApi(object): + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient.get_default() + self.api_client = api_client + + @validate_arguments + def get_image(self, image_query : Annotated[Optional[ImageQuery], Field(description="The query used to get an image.")] = None, **kwargs) -> Image: # noqa: E501 + """Get an image # noqa: E501 + + Returns the image specified. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_image(image_query, async_req=True) + >>> result = thread.get() + + :param image_query: The query used to get an image. + :type image_query: ImageQuery + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: Image + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + raise ValueError("Error! Please call the get_image_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data") + return self.get_image_with_http_info(image_query, **kwargs) # noqa: E501 + + @validate_arguments + def get_image_with_http_info(self, image_query : Annotated[Optional[ImageQuery], Field(description="The query used to get an image.")] = None, **kwargs) -> ApiResponse: # noqa: E501 + """Get an image # noqa: E501 + + Returns the image specified. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_image_with_http_info(image_query, async_req=True) + >>> result = thread.get() + + :param image_query: The query used to get an image. + :type image_query: ImageQuery + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(Image, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'image_query' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method get_image" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + + # process the query parameters + _query_params = [] + if _params.get('image_query') is not None: # noqa: E501 + _query_params.append(('imageQuery', _params['image_query'])) + + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json', 'application/problem+json']) # noqa: E501 + + # authentication setting + _auth_settings = [] # noqa: E501 + + _response_types_map = { + '200': "Image", + '404': "BasicError", + '500': "BasicError", + } + + return self.api_client.call_api( + '/images', 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) diff --git a/libs/openchallenges/api-client-python/openchallenges_client/api/organization_api.py b/libs/openchallenges/api-client-python/openchallenges_client/api/organization_api.py new file mode 100644 index 0000000000..86e047d964 --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/api/organization_api.py @@ -0,0 +1,330 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import re # noqa: F401 +import io +import warnings + +from pydantic import validate_arguments, ValidationError +from typing_extensions import Annotated + +from pydantic import Field, constr + +from typing import Optional + +from openchallenges_client.models.organization import Organization +from openchallenges_client.models.organization_search_query import OrganizationSearchQuery +from openchallenges_client.models.organizations_page import OrganizationsPage + +from openchallenges_client.api_client import ApiClient +from openchallenges_client.api_response import ApiResponse +from openchallenges_client.exceptions import ( # noqa: F401 + ApiTypeError, + ApiValueError +) + + +class OrganizationApi(object): + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient.get_default() + self.api_client = api_client + + @validate_arguments + def get_organization(self, org : Annotated[constr(strict=True, max_length=64, min_length=1), Field(..., description="The id or login of the organization.")], **kwargs) -> Organization: # noqa: E501 + """Get an organization # noqa: E501 + + Returns the organization specified # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_organization(org, async_req=True) + >>> result = thread.get() + + :param org: The id or login of the organization. (required) + :type org: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: Organization + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + raise ValueError("Error! Please call the get_organization_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data") + return self.get_organization_with_http_info(org, **kwargs) # noqa: E501 + + @validate_arguments + def get_organization_with_http_info(self, org : Annotated[constr(strict=True, max_length=64, min_length=1), Field(..., description="The id or login of the organization.")], **kwargs) -> ApiResponse: # noqa: E501 + """Get an organization # noqa: E501 + + Returns the organization specified # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_organization_with_http_info(org, async_req=True) + >>> result = thread.get() + + :param org: The id or login of the organization. (required) + :type org: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(Organization, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'org' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method get_organization" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['org']: + _path_params['org'] = _params['org'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json', 'application/problem+json']) # noqa: E501 + + # authentication setting + _auth_settings = [] # noqa: E501 + + _response_types_map = { + '200': "Organization", + '404': "BasicError", + '500': "BasicError", + } + + return self.api_client.call_api( + '/organizations/{org}', 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def list_organizations(self, organization_search_query : Annotated[Optional[OrganizationSearchQuery], Field(description="The search query used to find organizations.")] = None, **kwargs) -> OrganizationsPage: # noqa: E501 + """List organizations # noqa: E501 + + List organizations # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.list_organizations(organization_search_query, async_req=True) + >>> result = thread.get() + + :param organization_search_query: The search query used to find organizations. + :type organization_search_query: OrganizationSearchQuery + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: OrganizationsPage + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + raise ValueError("Error! Please call the list_organizations_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data") + return self.list_organizations_with_http_info(organization_search_query, **kwargs) # noqa: E501 + + @validate_arguments + def list_organizations_with_http_info(self, organization_search_query : Annotated[Optional[OrganizationSearchQuery], Field(description="The search query used to find organizations.")] = None, **kwargs) -> ApiResponse: # noqa: E501 + """List organizations # noqa: E501 + + List organizations # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.list_organizations_with_http_info(organization_search_query, async_req=True) + >>> result = thread.get() + + :param organization_search_query: The search query used to find organizations. + :type organization_search_query: OrganizationSearchQuery + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(OrganizationsPage, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'organization_search_query' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method list_organizations" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + + # process the query parameters + _query_params = [] + if _params.get('organization_search_query') is not None: # noqa: E501 + _query_params.append(('organizationSearchQuery', _params['organization_search_query'])) + + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json', 'application/problem+json']) # noqa: E501 + + # authentication setting + _auth_settings = [] # noqa: E501 + + _response_types_map = { + '200': "OrganizationsPage", + '400': "BasicError", + '500': "BasicError", + } + + return self.api_client.call_api( + '/organizations', 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) diff --git a/libs/openchallenges/api-client-python/openchallenges_client/api/user_api.py b/libs/openchallenges/api-client-python/openchallenges_client/api/user_api.py new file mode 100644 index 0000000000..81931a023f --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/api/user_api.py @@ -0,0 +1,629 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import re # noqa: F401 +import io +import warnings + +from pydantic import validate_arguments, ValidationError +from typing_extensions import Annotated + +from pydantic import Field, StrictInt, conint + +from typing import Any, Dict, Optional + +from openchallenges_client.models.user import User +from openchallenges_client.models.user_create_request import UserCreateRequest +from openchallenges_client.models.user_create_response import UserCreateResponse +from openchallenges_client.models.users_page import UsersPage + +from openchallenges_client.api_client import ApiClient +from openchallenges_client.api_response import ApiResponse +from openchallenges_client.exceptions import ( # noqa: F401 + ApiTypeError, + ApiValueError +) + + +class UserApi(object): + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient.get_default() + self.api_client = api_client + + @validate_arguments + def create_user(self, user_create_request : UserCreateRequest, **kwargs) -> UserCreateResponse: # noqa: E501 + """Create a user # noqa: E501 + + Create a user with the specified account name # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.create_user(user_create_request, async_req=True) + >>> result = thread.get() + + :param user_create_request: (required) + :type user_create_request: UserCreateRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: UserCreateResponse + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + raise ValueError("Error! Please call the create_user_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data") + return self.create_user_with_http_info(user_create_request, **kwargs) # noqa: E501 + + @validate_arguments + def create_user_with_http_info(self, user_create_request : UserCreateRequest, **kwargs) -> ApiResponse: # noqa: E501 + """Create a user # noqa: E501 + + Create a user with the specified account name # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.create_user_with_http_info(user_create_request, async_req=True) + >>> result = thread.get() + + :param user_create_request: (required) + :type user_create_request: UserCreateRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(UserCreateResponse, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'user_create_request' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method create_user" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + if _params['user_create_request'] is not None: + _body_params = _params['user_create_request'] + + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json', 'application/problem+json']) # noqa: E501 + + # set the HTTP header `Content-Type` + _content_types_list = _params.get('_content_type', + self.api_client.select_header_content_type( + ['application/json'])) + if _content_types_list: + _header_params['Content-Type'] = _content_types_list + + # authentication setting + _auth_settings = [] # noqa: E501 + + _response_types_map = { + '201': "UserCreateResponse", + '400': "BasicError", + '409': "BasicError", + '500': "BasicError", + } + + return self.api_client.call_api( + '/users/register', 'POST', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def delete_user(self, user_id : Annotated[StrictInt, Field(..., description="The unique identifier of the user, either the user account ID or login")], **kwargs) -> object: # noqa: E501 + """Delete a user # noqa: E501 + + Deletes the user specified # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.delete_user(user_id, async_req=True) + >>> result = thread.get() + + :param user_id: The unique identifier of the user, either the user account ID or login (required) + :type user_id: int + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: object + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + raise ValueError("Error! Please call the delete_user_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data") + return self.delete_user_with_http_info(user_id, **kwargs) # noqa: E501 + + @validate_arguments + def delete_user_with_http_info(self, user_id : Annotated[StrictInt, Field(..., description="The unique identifier of the user, either the user account ID or login")], **kwargs) -> ApiResponse: # noqa: E501 + """Delete a user # noqa: E501 + + Deletes the user specified # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.delete_user_with_http_info(user_id, async_req=True) + >>> result = thread.get() + + :param user_id: The unique identifier of the user, either the user account ID or login (required) + :type user_id: int + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(object, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'user_id' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method delete_user" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['user_id']: + _path_params['userId'] = _params['user_id'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json', 'application/problem+json']) # noqa: E501 + + # authentication setting + _auth_settings = [] # noqa: E501 + + _response_types_map = { + '200': "object", + '400': "BasicError", + '500': "BasicError", + } + + return self.api_client.call_api( + '/users/{userId}', 'DELETE', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def get_user(self, user_id : Annotated[StrictInt, Field(..., description="The unique identifier of the user, either the user account ID or login")], **kwargs) -> User: # noqa: E501 + """Get a user # noqa: E501 + + Returns the user specified # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_user(user_id, async_req=True) + >>> result = thread.get() + + :param user_id: The unique identifier of the user, either the user account ID or login (required) + :type user_id: int + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: User + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + raise ValueError("Error! Please call the get_user_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data") + return self.get_user_with_http_info(user_id, **kwargs) # noqa: E501 + + @validate_arguments + def get_user_with_http_info(self, user_id : Annotated[StrictInt, Field(..., description="The unique identifier of the user, either the user account ID or login")], **kwargs) -> ApiResponse: # noqa: E501 + """Get a user # noqa: E501 + + Returns the user specified # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_user_with_http_info(user_id, async_req=True) + >>> result = thread.get() + + :param user_id: The unique identifier of the user, either the user account ID or login (required) + :type user_id: int + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(User, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'user_id' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method get_user" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['user_id']: + _path_params['userId'] = _params['user_id'] + + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json', 'application/problem+json']) # noqa: E501 + + # authentication setting + _auth_settings = [] # noqa: E501 + + _response_types_map = { + '200': "User", + '404': "BasicError", + '500': "BasicError", + } + + return self.api_client.call_api( + '/users/{userId}', 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def list_users(self, page_number : Annotated[Optional[conint(strict=True, ge=0)], Field(description="The page number.")] = None, page_size : Annotated[Optional[conint(strict=True, ge=1)], Field(description="The number of items in a single page.")] = None, **kwargs) -> UsersPage: # noqa: E501 + """Get all users # noqa: E501 + + Returns the users # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.list_users(page_number, page_size, async_req=True) + >>> result = thread.get() + + :param page_number: The page number. + :type page_number: int + :param page_size: The number of items in a single page. + :type page_size: int + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: UsersPage + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + raise ValueError("Error! Please call the list_users_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data") + return self.list_users_with_http_info(page_number, page_size, **kwargs) # noqa: E501 + + @validate_arguments + def list_users_with_http_info(self, page_number : Annotated[Optional[conint(strict=True, ge=0)], Field(description="The page number.")] = None, page_size : Annotated[Optional[conint(strict=True, ge=1)], Field(description="The number of items in a single page.")] = None, **kwargs) -> ApiResponse: # noqa: E501 + """Get all users # noqa: E501 + + Returns the users # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.list_users_with_http_info(page_number, page_size, async_req=True) + >>> result = thread.get() + + :param page_number: The page number. + :type page_number: int + :param page_size: The number of items in a single page. + :type page_size: int + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(UsersPage, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [ + 'page_number', + 'page_size' + ] + _all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth', + '_content_type', + '_headers' + ] + ) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method list_users" % _key + ) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + + # process the query parameters + _query_params = [] + if _params.get('page_number') is not None: # noqa: E501 + _query_params.append(('pageNumber', _params['page_number'])) + + if _params.get('page_size') is not None: # noqa: E501 + _query_params.append(('pageSize', _params['page_size'])) + + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json', 'application/problem+json']) # noqa: E501 + + # authentication setting + _auth_settings = [] # noqa: E501 + + _response_types_map = { + '200': "UsersPage", + '400': "BasicError", + '500': "BasicError", + } + + return self.api_client.call_api( + '/users', 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) diff --git a/libs/openchallenges/api-client-python/openchallenges_client/api_client.py b/libs/openchallenges/api-client-python/openchallenges_client/api_client.py new file mode 100644 index 0000000000..2a5a958888 --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/api_client.py @@ -0,0 +1,755 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import atexit +import datetime +from dateutil.parser import parse +import json +import mimetypes +from multiprocessing.pool import ThreadPool +import os +import re +import tempfile + +from urllib.parse import quote + +from openchallenges_client.configuration import Configuration +from openchallenges_client.api_response import ApiResponse +import openchallenges_client.models +from openchallenges_client import rest +from openchallenges_client.exceptions import ApiValueError, ApiException + + +class ApiClient(object): + """Generic API client for OpenAPI client library builds. + + OpenAPI generic API client. This client handles the client- + server communication, and is invariant across implementations. Specifics of + the methods and models for each application are generated from the OpenAPI + templates. + + :param configuration: .Configuration object for this client + :param header_name: a header to pass when making calls to the API. + :param header_value: a header value to pass when making calls to + the API. + :param cookie: a cookie to include in the header when making calls + to the API + :param pool_threads: The number of threads to use for async requests + to the API. More threads means more concurrent API requests. + """ + + PRIMITIVE_TYPES = (float, bool, bytes, str, int) + NATIVE_TYPES_MAPPING = { + 'int': int, + 'long': int, # TODO remove as only py3 is supported? + 'float': float, + 'str': str, + 'bool': bool, + 'date': datetime.date, + 'datetime': datetime.datetime, + 'object': object, + } + _pool = None + + def __init__(self, configuration=None, header_name=None, header_value=None, + cookie=None, pool_threads=1): + # use default configuration if none is provided + if configuration is None: + configuration = Configuration.get_default() + self.configuration = configuration + self.pool_threads = pool_threads + + self.rest_client = rest.RESTClientObject(configuration) + self.default_headers = {} + if header_name is not None: + self.default_headers[header_name] = header_value + self.cookie = cookie + # Set default User-Agent. + self.user_agent = 'OpenAPI-Generator/1.0.0/python' + self.client_side_validation = configuration.client_side_validation + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_value, traceback): + self.close() + + def close(self): + if self._pool: + self._pool.close() + self._pool.join() + self._pool = None + if hasattr(atexit, 'unregister'): + atexit.unregister(self.close) + + @property + def pool(self): + """Create thread pool on first request + avoids instantiating unused threadpool for blocking clients. + """ + if self._pool is None: + atexit.register(self.close) + self._pool = ThreadPool(self.pool_threads) + return self._pool + + @property + def user_agent(self): + """User agent for this API client""" + return self.default_headers['User-Agent'] + + @user_agent.setter + def user_agent(self, value): + self.default_headers['User-Agent'] = value + + def set_default_header(self, header_name, header_value): + self.default_headers[header_name] = header_value + + + _default = None + + @classmethod + def get_default(cls): + """Return new instance of ApiClient. + + This method returns newly created, based on default constructor, + object of ApiClient class or returns a copy of default + ApiClient. + + :return: The ApiClient object. + """ + if cls._default is None: + cls._default = ApiClient() + return cls._default + + @classmethod + def set_default(cls, default): + """Set default instance of ApiClient. + + It stores default ApiClient. + + :param default: object of ApiClient. + """ + cls._default = default + + def __call_api( + self, resource_path, method, path_params=None, + query_params=None, header_params=None, body=None, post_params=None, + files=None, response_types_map=None, auth_settings=None, + _return_http_data_only=None, collection_formats=None, + _preload_content=True, _request_timeout=None, _host=None, + _request_auth=None): + + config = self.configuration + + # header parameters + header_params = header_params or {} + header_params.update(self.default_headers) + if self.cookie: + header_params['Cookie'] = self.cookie + if header_params: + header_params = self.sanitize_for_serialization(header_params) + header_params = dict(self.parameters_to_tuples(header_params, + collection_formats)) + + # path parameters + if path_params: + path_params = self.sanitize_for_serialization(path_params) + path_params = self.parameters_to_tuples(path_params, + collection_formats) + for k, v in path_params: + # specified safe chars, encode everything + resource_path = resource_path.replace( + '{%s}' % k, + quote(str(v), safe=config.safe_chars_for_path_param) + ) + + # post parameters + if post_params or files: + post_params = post_params if post_params else [] + post_params = self.sanitize_for_serialization(post_params) + post_params = self.parameters_to_tuples(post_params, + collection_formats) + post_params.extend(self.files_parameters(files)) + + # auth setting + self.update_params_for_auth( + header_params, query_params, auth_settings, + resource_path, method, body, + request_auth=_request_auth) + + # body + if body: + body = self.sanitize_for_serialization(body) + + # request url + if _host is None: + url = self.configuration.host + resource_path + else: + # use server/host defined in path or operation instead + url = _host + resource_path + + # query parameters + if query_params: + query_params = self.sanitize_for_serialization(query_params) + url_query = self.parameters_to_url_query(query_params, + collection_formats) + url += "?" + url_query + + try: + # perform request and return response + response_data = self.request( + method, url, + query_params=query_params, + headers=header_params, + post_params=post_params, body=body, + _preload_content=_preload_content, + _request_timeout=_request_timeout) + except ApiException as e: + if e.body: + e.body = e.body.decode('utf-8') + raise e + + self.last_response = response_data + + return_data = None # assuming derialization is not needed + # data needs deserialization or returns HTTP data (deserialized) only + if _preload_content or _return_http_data_only: + response_type = response_types_map.get(str(response_data.status), None) + + if response_type == "bytearray": + response_data.data = response_data.data + else: + match = None + content_type = response_data.getheader('content-type') + if content_type is not None: + match = re.search(r"charset=([a-zA-Z\-\d]+)[\s;]?", content_type) + encoding = match.group(1) if match else "utf-8" + response_data.data = response_data.data.decode(encoding) + + # deserialize response data + if response_type == "bytearray": + return_data = response_data.data + elif response_type: + return_data = self.deserialize(response_data, response_type) + else: + return_data = None + + if _return_http_data_only: + return return_data + else: + return ApiResponse(status_code = response_data.status, + data = return_data, + headers = response_data.getheaders(), + raw_data = response_data.data) + + def sanitize_for_serialization(self, obj): + """Builds a JSON POST object. + + If obj is None, return None. + If obj is str, int, long, float, bool, return directly. + If obj is datetime.datetime, datetime.date + convert to string in iso8601 format. + If obj is list, sanitize each element in the list. + If obj is dict, return the dict. + If obj is OpenAPI model, return the properties dict. + + :param obj: The data to serialize. + :return: The serialized form of data. + """ + if obj is None: + return None + elif isinstance(obj, self.PRIMITIVE_TYPES): + return obj + elif isinstance(obj, list): + return [self.sanitize_for_serialization(sub_obj) + for sub_obj in obj] + elif isinstance(obj, tuple): + return tuple(self.sanitize_for_serialization(sub_obj) + for sub_obj in obj) + elif isinstance(obj, (datetime.datetime, datetime.date)): + return obj.isoformat() + + if isinstance(obj, dict): + obj_dict = obj + else: + # Convert model obj to dict except + # attributes `openapi_types`, `attribute_map` + # and attributes which value is not None. + # Convert attribute name to json key in + # model definition for request. + obj_dict = obj.to_dict() + + return {key: self.sanitize_for_serialization(val) + for key, val in obj_dict.items()} + + def deserialize(self, response, response_type): + """Deserializes response into an object. + + :param response: RESTResponse object to be deserialized. + :param response_type: class literal for + deserialized object, or string of class name. + + :return: deserialized object. + """ + # handle file downloading + # save response body into a tmp file and return the instance + if response_type == "file": + return self.__deserialize_file(response) + + # fetch data from response object + try: + data = json.loads(response.data) + except ValueError: + data = response.data + + return self.__deserialize(data, response_type) + + def __deserialize(self, data, klass): + """Deserializes dict, list, str into an object. + + :param data: dict, list or str. + :param klass: class literal, or string of class name. + + :return: object. + """ + if data is None: + return None + + if type(klass) == str: + if klass.startswith('List['): + sub_kls = re.match(r'List\[(.*)]', klass).group(1) + return [self.__deserialize(sub_data, sub_kls) + for sub_data in data] + + if klass.startswith('Dict['): + sub_kls = re.match(r'Dict\[([^,]*), (.*)]', klass).group(2) + return {k: self.__deserialize(v, sub_kls) + for k, v in data.items()} + + # convert str to class + if klass in self.NATIVE_TYPES_MAPPING: + klass = self.NATIVE_TYPES_MAPPING[klass] + else: + klass = getattr(openchallenges_client.models, klass) + + if klass in self.PRIMITIVE_TYPES: + return self.__deserialize_primitive(data, klass) + elif klass == object: + return self.__deserialize_object(data) + elif klass == datetime.date: + return self.__deserialize_date(data) + elif klass == datetime.datetime: + return self.__deserialize_datetime(data) + else: + return self.__deserialize_model(data, klass) + + def call_api(self, resource_path, method, + path_params=None, query_params=None, header_params=None, + body=None, post_params=None, files=None, + response_types_map=None, auth_settings=None, + async_req=None, _return_http_data_only=None, + collection_formats=None, _preload_content=True, + _request_timeout=None, _host=None, _request_auth=None): + """Makes the HTTP request (synchronous) and returns deserialized data. + + To make an async_req request, set the async_req parameter. + + :param resource_path: Path to method endpoint. + :param method: Method to call. + :param path_params: Path parameters in the url. + :param query_params: Query parameters in the url. + :param header_params: Header parameters to be + placed in the request header. + :param body: Request body. + :param post_params dict: Request post form parameters, + for `application/x-www-form-urlencoded`, `multipart/form-data`. + :param auth_settings list: Auth Settings names for the request. + :param response: Response data type. + :param files dict: key -> filename, value -> filepath, + for `multipart/form-data`. + :param async_req bool: execute request asynchronously + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :param collection_formats: dict of collection formats for path, query, + header, and post parameters. + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_token: dict, optional + :return: + If async_req parameter is True, + the request will be called asynchronously. + The method will return the request thread. + If parameter async_req is False or missing, + then the method will return the response directly. + """ + if not async_req: + return self.__call_api(resource_path, method, + path_params, query_params, header_params, + body, post_params, files, + response_types_map, auth_settings, + _return_http_data_only, collection_formats, + _preload_content, _request_timeout, _host, + _request_auth) + + return self.pool.apply_async(self.__call_api, (resource_path, + method, path_params, + query_params, + header_params, body, + post_params, files, + response_types_map, + auth_settings, + _return_http_data_only, + collection_formats, + _preload_content, + _request_timeout, + _host, _request_auth)) + + def request(self, method, url, query_params=None, headers=None, + post_params=None, body=None, _preload_content=True, + _request_timeout=None): + """Makes the HTTP request using RESTClient.""" + if method == "GET": + return self.rest_client.get_request(url, + query_params=query_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + headers=headers) + elif method == "HEAD": + return self.rest_client.head_request(url, + query_params=query_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + headers=headers) + elif method == "OPTIONS": + return self.rest_client.options_request(url, + query_params=query_params, + headers=headers, + _preload_content=_preload_content, + _request_timeout=_request_timeout) + elif method == "POST": + return self.rest_client.post_request(url, + query_params=query_params, + headers=headers, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + elif method == "PUT": + return self.rest_client.put_request(url, + query_params=query_params, + headers=headers, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + elif method == "PATCH": + return self.rest_client.patch_request(url, + query_params=query_params, + headers=headers, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + elif method == "DELETE": + return self.rest_client.delete_request(url, + query_params=query_params, + headers=headers, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + else: + raise ApiValueError( + "http method must be `GET`, `HEAD`, `OPTIONS`," + " `POST`, `PATCH`, `PUT` or `DELETE`." + ) + + def parameters_to_tuples(self, params, collection_formats): + """Get parameters as list of tuples, formatting collections. + + :param params: Parameters as dict or list of two-tuples + :param dict collection_formats: Parameter collection formats + :return: Parameters as list of tuples, collections formatted + """ + new_params = [] + if collection_formats is None: + collection_formats = {} + for k, v in params.items() if isinstance(params, dict) else params: # noqa: E501 + if k in collection_formats: + collection_format = collection_formats[k] + if collection_format == 'multi': + new_params.extend((k, value) for value in v) + else: + if collection_format == 'ssv': + delimiter = ' ' + elif collection_format == 'tsv': + delimiter = '\t' + elif collection_format == 'pipes': + delimiter = '|' + else: # csv is the default + delimiter = ',' + new_params.append( + (k, delimiter.join(str(value) for value in v))) + else: + new_params.append((k, v)) + return new_params + + def parameters_to_url_query(self, params, collection_formats): + """Get parameters as list of tuples, formatting collections. + + :param params: Parameters as dict or list of two-tuples + :param dict collection_formats: Parameter collection formats + :return: URL query string (e.g. a=Hello%20World&b=123) + """ + new_params = [] + if collection_formats is None: + collection_formats = {} + for k, v in params.items() if isinstance(params, dict) else params: # noqa: E501 + if isinstance(v, (int, float)): + v = str(v) + if isinstance(v, bool): + v = str(v).lower() + if isinstance(v, dict): + v = json.dumps(v) + + if k in collection_formats: + collection_format = collection_formats[k] + if collection_format == 'multi': + new_params.extend((k, value) for value in v) + else: + if collection_format == 'ssv': + delimiter = ' ' + elif collection_format == 'tsv': + delimiter = '\t' + elif collection_format == 'pipes': + delimiter = '|' + else: # csv is the default + delimiter = ',' + new_params.append( + (k, delimiter.join(quote(str(value)) for value in v))) + else: + new_params.append((k, quote(str(v)))) + + return "&".join(["=".join(item) for item in new_params]) + + def files_parameters(self, files=None): + """Builds form parameters. + + :param files: File parameters. + :return: Form parameters with files. + """ + params = [] + + if files: + for k, v in files.items(): + if not v: + continue + file_names = v if type(v) is list else [v] + for n in file_names: + with open(n, 'rb') as f: + filename = os.path.basename(f.name) + filedata = f.read() + mimetype = (mimetypes.guess_type(filename)[0] or + 'application/octet-stream') + params.append( + tuple([k, tuple([filename, filedata, mimetype])])) + + return params + + def select_header_accept(self, accepts): + """Returns `Accept` based on an array of accepts provided. + + :param accepts: List of headers. + :return: Accept (e.g. application/json). + """ + if not accepts: + return + + for accept in accepts: + if re.search('json', accept, re.IGNORECASE): + return accept + + return accepts[0] + + def select_header_content_type(self, content_types): + """Returns `Content-Type` based on an array of content_types provided. + + :param content_types: List of content-types. + :return: Content-Type (e.g. application/json). + """ + if not content_types: + return None + + for content_type in content_types: + if re.search('json', content_type, re.IGNORECASE): + return content_type + + return content_types[0] + + def update_params_for_auth(self, headers, queries, auth_settings, + resource_path, method, body, + request_auth=None): + """Updates header and query params based on authentication setting. + + :param headers: Header parameters dict to be updated. + :param queries: Query parameters tuple list to be updated. + :param auth_settings: Authentication setting identifiers list. + :resource_path: A string representation of the HTTP request resource path. + :method: A string representation of the HTTP request method. + :body: A object representing the body of the HTTP request. + The object type is the return value of sanitize_for_serialization(). + :param request_auth: if set, the provided settings will + override the token in the configuration. + """ + if not auth_settings: + return + + if request_auth: + self._apply_auth_params(headers, queries, + resource_path, method, body, + request_auth) + return + + for auth in auth_settings: + auth_setting = self.configuration.auth_settings().get(auth) + if auth_setting: + self._apply_auth_params(headers, queries, + resource_path, method, body, + auth_setting) + + def _apply_auth_params(self, headers, queries, + resource_path, method, body, + auth_setting): + """Updates the request parameters based on a single auth_setting + + :param headers: Header parameters dict to be updated. + :param queries: Query parameters tuple list to be updated. + :resource_path: A string representation of the HTTP request resource path. + :method: A string representation of the HTTP request method. + :body: A object representing the body of the HTTP request. + The object type is the return value of sanitize_for_serialization(). + :param auth_setting: auth settings for the endpoint + """ + if auth_setting['in'] == 'cookie': + headers['Cookie'] = auth_setting['value'] + elif auth_setting['in'] == 'header': + if auth_setting['type'] != 'http-signature': + headers[auth_setting['key']] = auth_setting['value'] + elif auth_setting['in'] == 'query': + queries.append((auth_setting['key'], auth_setting['value'])) + else: + raise ApiValueError( + 'Authentication token must be in `query` or `header`' + ) + + def __deserialize_file(self, response): + """Deserializes body to file + + Saves response body into a file in a temporary folder, + using the filename from the `Content-Disposition` header if provided. + + :param response: RESTResponse. + :return: file path. + """ + fd, path = tempfile.mkstemp(dir=self.configuration.temp_folder_path) + os.close(fd) + os.remove(path) + + content_disposition = response.getheader("Content-Disposition") + if content_disposition: + filename = re.search(r'filename=[\'"]?([^\'"\s]+)[\'"]?', + content_disposition).group(1) + path = os.path.join(os.path.dirname(path), filename) + + with open(path, "wb") as f: + f.write(response.data) + + return path + + def __deserialize_primitive(self, data, klass): + """Deserializes string to primitive type. + + :param data: str. + :param klass: class literal. + + :return: int, long, float, str, bool. + """ + try: + return klass(data) + except UnicodeEncodeError: + return str(data) + except TypeError: + return data + + def __deserialize_object(self, value): + """Return an original value. + + :return: object. + """ + return value + + def __deserialize_date(self, string): + """Deserializes string to date. + + :param string: str. + :return: date. + """ + try: + return parse(string).date() + except ImportError: + return string + except ValueError: + raise rest.ApiException( + status=0, + reason="Failed to parse `{0}` as date object".format(string) + ) + + def __deserialize_datetime(self, string): + """Deserializes string to datetime. + + The string should be in iso8601 datetime format. + + :param string: str. + :return: datetime. + """ + try: + return parse(string) + except ImportError: + return string + except ValueError: + raise rest.ApiException( + status=0, + reason=( + "Failed to parse `{0}` as datetime object" + .format(string) + ) + ) + + def __deserialize_model(self, data, klass): + """Deserializes list or dict to model. + + :param data: dict, list. + :param klass: class literal. + :return: model object. + """ + + return klass.from_dict(data) diff --git a/libs/openchallenges/api-client-python/openchallenges_client/api_response.py b/libs/openchallenges/api-client-python/openchallenges_client/api_response.py new file mode 100644 index 0000000000..d81c2ff584 --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/api_response.py @@ -0,0 +1,25 @@ +"""API response object.""" + +from __future__ import annotations +from typing import Any, Dict, Optional +from pydantic import Field, StrictInt, StrictStr + +class ApiResponse: + """ + API response object + """ + + status_code: Optional[StrictInt] = Field(None, description="HTTP status code") + headers: Optional[Dict[StrictStr, StrictStr]] = Field(None, description="HTTP headers") + data: Optional[Any] = Field(None, description="Deserialized data given the data type") + raw_data: Optional[Any] = Field(None, description="Raw data (HTTP response body)") + + def __init__(self, + status_code=None, + headers=None, + data=None, + raw_data=None): + self.status_code = status_code + self.headers = headers + self.data = data + self.raw_data = raw_data diff --git a/libs/openchallenges/api-client-python/openchallenges_client/configuration.py b/libs/openchallenges/api-client-python/openchallenges_client/configuration.py new file mode 100644 index 0000000000..2d02950c68 --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/configuration.py @@ -0,0 +1,434 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import copy +import logging +import multiprocessing +import sys +import urllib3 + +import http.client as httplib +from openchallenges_client.exceptions import ApiValueError + +JSON_SCHEMA_VALIDATION_KEYWORDS = { + 'multipleOf', 'maximum', 'exclusiveMaximum', + 'minimum', 'exclusiveMinimum', 'maxLength', + 'minLength', 'pattern', 'maxItems', 'minItems' +} + +class Configuration(object): + """This class contains various settings of the API client. + + :param host: Base url. + :param api_key: Dict to store API key(s). + Each entry in the dict specifies an API key. + The dict key is the name of the security scheme in the OAS specification. + The dict value is the API key secret. + :param api_key_prefix: Dict to store API prefix (e.g. Bearer). + The dict key is the name of the security scheme in the OAS specification. + The dict value is an API key prefix when generating the auth data. + :param username: Username for HTTP basic authentication. + :param password: Password for HTTP basic authentication. + :param access_token: Access token. + :param server_index: Index to servers configuration. + :param server_variables: Mapping with string values to replace variables in + templated server configuration. The validation of enums is performed for + variables with defined enum values before. + :param server_operation_index: Mapping from operation ID to an index to server + configuration. + :param server_operation_variables: Mapping from operation ID to a mapping with + string values to replace variables in templated server configuration. + The validation of enums is performed for variables with defined enum values before. + :param ssl_ca_cert: str - the path to a file of concatenated CA certificates + in PEM format. + + """ + + _default = None + + def __init__(self, host=None, + api_key=None, api_key_prefix=None, + username=None, password=None, + access_token=None, + server_index=None, server_variables=None, + server_operation_index=None, server_operation_variables=None, + ssl_ca_cert=None, + ): + """Constructor + """ + self._base_path = "http://localhost/v1" if host is None else host + """Default Base url + """ + self.server_index = 0 if server_index is None and host is None else server_index + self.server_operation_index = server_operation_index or {} + """Default server index + """ + self.server_variables = server_variables or {} + self.server_operation_variables = server_operation_variables or {} + """Default server variables + """ + self.temp_folder_path = None + """Temp file folder for downloading files + """ + # Authentication Settings + self.api_key = {} + if api_key: + self.api_key = api_key + """dict to store API key(s) + """ + self.api_key_prefix = {} + if api_key_prefix: + self.api_key_prefix = api_key_prefix + """dict to store API prefix (e.g. Bearer) + """ + self.refresh_api_key_hook = None + """function hook to refresh API key if expired + """ + self.username = username + """Username for HTTP basic authentication + """ + self.password = password + """Password for HTTP basic authentication + """ + self.access_token = access_token + """Access token + """ + self.logger = {} + """Logging Settings + """ + self.logger["package_logger"] = logging.getLogger("openchallenges_client") + self.logger["urllib3_logger"] = logging.getLogger("urllib3") + self.logger_format = '%(asctime)s %(levelname)s %(message)s' + """Log format + """ + self.logger_stream_handler = None + """Log stream handler + """ + self.logger_file_handler = None + """Log file handler + """ + self.logger_file = None + """Debug file location + """ + self.debug = False + """Debug switch + """ + + self.verify_ssl = True + """SSL/TLS verification + Set this to false to skip verifying SSL certificate when calling API + from https server. + """ + self.ssl_ca_cert = ssl_ca_cert + """Set this to customize the certificate file to verify the peer. + """ + self.cert_file = None + """client certificate file + """ + self.key_file = None + """client key file + """ + self.assert_hostname = None + """Set this to True/False to enable/disable SSL hostname verification. + """ + self.tls_server_name = None + """SSL/TLS Server Name Indication (SNI) + Set this to the SNI value expected by the server. + """ + + self.connection_pool_maxsize = multiprocessing.cpu_count() * 5 + """urllib3 connection pool's maximum number of connections saved + per pool. urllib3 uses 1 connection as default value, but this is + not the best value when you are making a lot of possibly parallel + requests to the same host, which is often the case here. + cpu_count * 5 is used as default value to increase performance. + """ + + self.proxy = None + """Proxy URL + """ + self.proxy_headers = None + """Proxy headers + """ + self.safe_chars_for_path_param = '' + """Safe chars for path_param + """ + self.retries = None + """Adding retries to override urllib3 default value 3 + """ + # Enable client side validation + self.client_side_validation = True + + self.socket_options = None + """Options to pass down to the underlying urllib3 socket + """ + + self.datetime_format = "%Y-%m-%dT%H:%M:%S.%f%z" + """datetime format + """ + + self.date_format = "%Y-%m-%d" + """date format + """ + + def __deepcopy__(self, memo): + cls = self.__class__ + result = cls.__new__(cls) + memo[id(self)] = result + for k, v in self.__dict__.items(): + if k not in ('logger', 'logger_file_handler'): + setattr(result, k, copy.deepcopy(v, memo)) + # shallow copy of loggers + result.logger = copy.copy(self.logger) + # use setters to configure loggers + result.logger_file = self.logger_file + result.debug = self.debug + return result + + def __setattr__(self, name, value): + object.__setattr__(self, name, value) + + @classmethod + def set_default(cls, default): + """Set default instance of configuration. + + It stores default configuration, which can be + returned by get_default_copy method. + + :param default: object of Configuration + """ + cls._default = default + + @classmethod + def get_default_copy(cls): + """Deprecated. Please use `get_default` instead. + + Deprecated. Please use `get_default` instead. + + :return: The configuration object. + """ + return cls.get_default() + + @classmethod + def get_default(cls): + """Return the default configuration. + + This method returns newly created, based on default constructor, + object of Configuration class or returns a copy of default + configuration. + + :return: The configuration object. + """ + if cls._default is None: + cls._default = Configuration() + return cls._default + + @property + def logger_file(self): + """The logger file. + + If the logger_file is None, then add stream handler and remove file + handler. Otherwise, add file handler and remove stream handler. + + :param value: The logger_file path. + :type: str + """ + return self.__logger_file + + @logger_file.setter + def logger_file(self, value): + """The logger file. + + If the logger_file is None, then add stream handler and remove file + handler. Otherwise, add file handler and remove stream handler. + + :param value: The logger_file path. + :type: str + """ + self.__logger_file = value + if self.__logger_file: + # If set logging file, + # then add file handler and remove stream handler. + self.logger_file_handler = logging.FileHandler(self.__logger_file) + self.logger_file_handler.setFormatter(self.logger_formatter) + for _, logger in self.logger.items(): + logger.addHandler(self.logger_file_handler) + + @property + def debug(self): + """Debug status + + :param value: The debug status, True or False. + :type: bool + """ + return self.__debug + + @debug.setter + def debug(self, value): + """Debug status + + :param value: The debug status, True or False. + :type: bool + """ + self.__debug = value + if self.__debug: + # if debug status is True, turn on debug logging + for _, logger in self.logger.items(): + logger.setLevel(logging.DEBUG) + # turn on httplib debug + httplib.HTTPConnection.debuglevel = 1 + else: + # if debug status is False, turn off debug logging, + # setting log level to default `logging.WARNING` + for _, logger in self.logger.items(): + logger.setLevel(logging.WARNING) + # turn off httplib debug + httplib.HTTPConnection.debuglevel = 0 + + @property + def logger_format(self): + """The logger format. + + The logger_formatter will be updated when sets logger_format. + + :param value: The format string. + :type: str + """ + return self.__logger_format + + @logger_format.setter + def logger_format(self, value): + """The logger format. + + The logger_formatter will be updated when sets logger_format. + + :param value: The format string. + :type: str + """ + self.__logger_format = value + self.logger_formatter = logging.Formatter(self.__logger_format) + + def get_api_key_with_prefix(self, identifier, alias=None): + """Gets API key (with prefix if set). + + :param identifier: The identifier of apiKey. + :param alias: The alternative identifier of apiKey. + :return: The token for api key authentication. + """ + if self.refresh_api_key_hook is not None: + self.refresh_api_key_hook(self) + key = self.api_key.get(identifier, self.api_key.get(alias) if alias is not None else None) + if key: + prefix = self.api_key_prefix.get(identifier) + if prefix: + return "%s %s" % (prefix, key) + else: + return key + + def get_basic_auth_token(self): + """Gets HTTP basic authentication header (string). + + :return: The token for basic HTTP authentication. + """ + username = "" + if self.username is not None: + username = self.username + password = "" + if self.password is not None: + password = self.password + return urllib3.util.make_headers( + basic_auth=username + ':' + password + ).get('authorization') + + def auth_settings(self): + """Gets Auth Settings dict for api client. + + :return: The Auth Settings information dict. + """ + auth = {} + return auth + + def to_debug_report(self): + """Gets the essential information for debugging. + + :return: The report for debugging. + """ + return "Python SDK Debug Report:\n"\ + "OS: {env}\n"\ + "Python Version: {pyversion}\n"\ + "Version of the API: 1.0.0\n"\ + "SDK Package Version: 1.0.0".\ + format(env=sys.platform, pyversion=sys.version) + + def get_host_settings(self): + """Gets an array of host settings + + :return: An array of host settings + """ + return [ + { + 'url': "http://localhost/v1", + 'description': "No description provided", + } + ] + + def get_host_from_settings(self, index, variables=None, servers=None): + """Gets host URL based on the index and variables + :param index: array index of the host settings + :param variables: hash of variable and the corresponding value + :param servers: an array of host settings or None + :return: URL based on host settings + """ + if index is None: + return self._base_path + + variables = {} if variables is None else variables + servers = self.get_host_settings() if servers is None else servers + + try: + server = servers[index] + except IndexError: + raise ValueError( + "Invalid index {0} when selecting the host settings. " + "Must be less than {1}".format(index, len(servers))) + + url = server['url'] + + # go through variables and replace placeholders + for variable_name, variable in server.get('variables', {}).items(): + used_value = variables.get( + variable_name, variable['default_value']) + + if 'enum_values' in variable \ + and used_value not in variable['enum_values']: + raise ValueError( + "The variable `{0}` in the host URL has invalid value " + "{1}. Must be {2}.".format( + variable_name, variables[variable_name], + variable['enum_values'])) + + url = url.replace("{" + variable_name + "}", used_value) + + return url + + @property + def host(self): + """Return generated host.""" + return self.get_host_from_settings(self.server_index, variables=self.server_variables) + + @host.setter + def host(self, value): + """Fix base path.""" + self._base_path = value + self.server_index = None diff --git a/libs/openchallenges/api-client-python/openchallenges_client/exceptions.py b/libs/openchallenges/api-client-python/openchallenges_client/exceptions.py new file mode 100644 index 0000000000..a70acd5e7b --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/exceptions.py @@ -0,0 +1,166 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +class OpenApiException(Exception): + """The base exception class for all OpenAPIExceptions""" + + +class ApiTypeError(OpenApiException, TypeError): + def __init__(self, msg, path_to_item=None, valid_classes=None, + key_type=None): + """ Raises an exception for TypeErrors + + Args: + msg (str): the exception message + + Keyword Args: + path_to_item (list): a list of keys an indices to get to the + current_item + None if unset + valid_classes (tuple): the primitive classes that current item + should be an instance of + None if unset + key_type (bool): False if our value is a value in a dict + True if it is a key in a dict + False if our item is an item in a list + None if unset + """ + self.path_to_item = path_to_item + self.valid_classes = valid_classes + self.key_type = key_type + full_msg = msg + if path_to_item: + full_msg = "{0} at {1}".format(msg, render_path(path_to_item)) + super(ApiTypeError, self).__init__(full_msg) + + +class ApiValueError(OpenApiException, ValueError): + def __init__(self, msg, path_to_item=None): + """ + Args: + msg (str): the exception message + + Keyword Args: + path_to_item (list) the path to the exception in the + received_data dict. None if unset + """ + + self.path_to_item = path_to_item + full_msg = msg + if path_to_item: + full_msg = "{0} at {1}".format(msg, render_path(path_to_item)) + super(ApiValueError, self).__init__(full_msg) + + +class ApiAttributeError(OpenApiException, AttributeError): + def __init__(self, msg, path_to_item=None): + """ + Raised when an attribute reference or assignment fails. + + Args: + msg (str): the exception message + + Keyword Args: + path_to_item (None/list) the path to the exception in the + received_data dict + """ + self.path_to_item = path_to_item + full_msg = msg + if path_to_item: + full_msg = "{0} at {1}".format(msg, render_path(path_to_item)) + super(ApiAttributeError, self).__init__(full_msg) + + +class ApiKeyError(OpenApiException, KeyError): + def __init__(self, msg, path_to_item=None): + """ + Args: + msg (str): the exception message + + Keyword Args: + path_to_item (None/list) the path to the exception in the + received_data dict + """ + self.path_to_item = path_to_item + full_msg = msg + if path_to_item: + full_msg = "{0} at {1}".format(msg, render_path(path_to_item)) + super(ApiKeyError, self).__init__(full_msg) + + +class ApiException(OpenApiException): + + def __init__(self, status=None, reason=None, http_resp=None): + if http_resp: + self.status = http_resp.status + self.reason = http_resp.reason + self.body = http_resp.data + self.headers = http_resp.getheaders() + else: + self.status = status + self.reason = reason + self.body = None + self.headers = None + + def __str__(self): + """Custom error messages for exception""" + error_message = "({0})\n"\ + "Reason: {1}\n".format(self.status, self.reason) + if self.headers: + error_message += "HTTP response headers: {0}\n".format( + self.headers) + + if self.body: + error_message += "HTTP response body: {0}\n".format(self.body) + + return error_message + +class BadRequestException(ApiException): + + def __init__(self, status=None, reason=None, http_resp=None): + super(BadRequestException, self).__init__(status, reason, http_resp) + +class NotFoundException(ApiException): + + def __init__(self, status=None, reason=None, http_resp=None): + super(NotFoundException, self).__init__(status, reason, http_resp) + + +class UnauthorizedException(ApiException): + + def __init__(self, status=None, reason=None, http_resp=None): + super(UnauthorizedException, self).__init__(status, reason, http_resp) + + +class ForbiddenException(ApiException): + + def __init__(self, status=None, reason=None, http_resp=None): + super(ForbiddenException, self).__init__(status, reason, http_resp) + + +class ServiceException(ApiException): + + def __init__(self, status=None, reason=None, http_resp=None): + super(ServiceException, self).__init__(status, reason, http_resp) + + +def render_path(path_to_item): + """Returns a string representation of a path""" + result = "" + for pth in path_to_item: + if isinstance(pth, int): + result += "[{0}]".format(pth) + else: + result += "['{0}']".format(pth) + return result diff --git a/libs/openchallenges/api-client-python/openchallenges_client/models/__init__.py b/libs/openchallenges/api-client-python/openchallenges_client/models/__init__.py new file mode 100644 index 0000000000..deae246a2b --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/models/__init__.py @@ -0,0 +1,59 @@ +# coding: utf-8 + +# flake8: noqa +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +# import models into model package +from openchallenges_client.models.basic_error import BasicError +from openchallenges_client.models.challenge import Challenge +from openchallenges_client.models.challenge_category import ChallengeCategory +from openchallenges_client.models.challenge_contribution import ChallengeContribution +from openchallenges_client.models.challenge_contribution_role import ChallengeContributionRole +from openchallenges_client.models.challenge_contributions_page import ChallengeContributionsPage +from openchallenges_client.models.challenge_difficulty import ChallengeDifficulty +from openchallenges_client.models.challenge_direction import ChallengeDirection +from openchallenges_client.models.challenge_incentive import ChallengeIncentive +from openchallenges_client.models.challenge_input_data_type import ChallengeInputDataType +from openchallenges_client.models.challenge_input_data_type_direction import ChallengeInputDataTypeDirection +from openchallenges_client.models.challenge_input_data_type_search_query import ChallengeInputDataTypeSearchQuery +from openchallenges_client.models.challenge_input_data_type_sort import ChallengeInputDataTypeSort +from openchallenges_client.models.challenge_input_data_types_page import ChallengeInputDataTypesPage +from openchallenges_client.models.challenge_platform import ChallengePlatform +from openchallenges_client.models.challenge_platform_direction import ChallengePlatformDirection +from openchallenges_client.models.challenge_platform_search_query import ChallengePlatformSearchQuery +from openchallenges_client.models.challenge_platform_sort import ChallengePlatformSort +from openchallenges_client.models.challenge_platforms_page import ChallengePlatformsPage +from openchallenges_client.models.challenge_search_query import ChallengeSearchQuery +from openchallenges_client.models.challenge_sort import ChallengeSort +from openchallenges_client.models.challenge_status import ChallengeStatus +from openchallenges_client.models.challenge_submission_type import ChallengeSubmissionType +from openchallenges_client.models.challenges_page import ChallengesPage +from openchallenges_client.models.challenges_per_year import ChallengesPerYear +from openchallenges_client.models.image import Image +from openchallenges_client.models.image_aspect_ratio import ImageAspectRatio +from openchallenges_client.models.image_height import ImageHeight +from openchallenges_client.models.image_query import ImageQuery +from openchallenges_client.models.organization import Organization +from openchallenges_client.models.organization_category import OrganizationCategory +from openchallenges_client.models.organization_direction import OrganizationDirection +from openchallenges_client.models.organization_search_query import OrganizationSearchQuery +from openchallenges_client.models.organization_sort import OrganizationSort +from openchallenges_client.models.organizations_page import OrganizationsPage +from openchallenges_client.models.page_metadata import PageMetadata +from openchallenges_client.models.simple_challenge_input_data_type import SimpleChallengeInputDataType +from openchallenges_client.models.simple_challenge_platform import SimpleChallengePlatform +from openchallenges_client.models.user import User +from openchallenges_client.models.user_create_request import UserCreateRequest +from openchallenges_client.models.user_create_response import UserCreateResponse +from openchallenges_client.models.user_status import UserStatus +from openchallenges_client.models.users_page import UsersPage diff --git a/libs/openchallenges/api-client-python/openchallenges_client/models/basic_error.py b/libs/openchallenges/api-client-python/openchallenges_client/models/basic_error.py new file mode 100644 index 0000000000..adf88bf0ea --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/models/basic_error.py @@ -0,0 +1,77 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + + +from typing import Optional +from pydantic import BaseModel, Field, StrictInt, StrictStr + +class BasicError(BaseModel): + """ + Problem details (tools.ietf.org/html/rfc7807) + """ + title: StrictStr = Field(..., description="A human readable documentation for the problem type") + status: StrictInt = Field(..., description="The HTTP status code") + detail: Optional[StrictStr] = Field(None, description="A human readable explanation specific to this occurrence of the problem") + type: Optional[StrictStr] = Field(None, description="An absolute URI that identifies the problem type") + __properties = ["title", "status", "detail", "type"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> BasicError: + """Create an instance of BasicError from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + }, + exclude_none=True) + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> BasicError: + """Create an instance of BasicError from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return BasicError.parse_obj(obj) + + _obj = BasicError.parse_obj({ + "title": obj.get("title"), + "status": obj.get("status"), + "detail": obj.get("detail"), + "type": obj.get("type") + }) + return _obj + + diff --git a/libs/openchallenges/api-client-python/openchallenges_client/models/challenge.py b/libs/openchallenges/api-client-python/openchallenges_client/models/challenge.py new file mode 100644 index 0000000000..d4edf48851 --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/models/challenge.py @@ -0,0 +1,140 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from datetime import date, datetime +from typing import List, Optional +from pydantic import BaseModel, Field, StrictInt, StrictStr, conlist, constr, validator +from openchallenges_client.models.challenge_difficulty import ChallengeDifficulty +from openchallenges_client.models.challenge_incentive import ChallengeIncentive +from openchallenges_client.models.challenge_status import ChallengeStatus +from openchallenges_client.models.challenge_submission_type import ChallengeSubmissionType +from openchallenges_client.models.simple_challenge_input_data_type import SimpleChallengeInputDataType +from openchallenges_client.models.simple_challenge_platform import SimpleChallengePlatform + +class Challenge(BaseModel): + """ + A challenge + """ + id: StrictInt = Field(..., description="The unique identifier of the challenge.") + slug: constr(strict=True, max_length=255, min_length=3) = Field(..., description="The slug of the challenge.") + name: constr(strict=True, max_length=255, min_length=3) = Field(..., description="The name of the challenge.") + headline: Optional[constr(strict=True, max_length=80, min_length=0)] = Field(None, description="The headline of the challenge.") + description: constr(strict=True, max_length=1000, min_length=0) = Field(..., description="The description of the challenge.") + doi: Optional[StrictStr] = None + status: ChallengeStatus = Field(...) + difficulty: ChallengeDifficulty = Field(...) + platform: SimpleChallengePlatform = Field(...) + website_url: Optional[StrictStr] = Field(None, alias="websiteUrl") + avatar_url: Optional[StrictStr] = Field(None, alias="avatarUrl") + incentives: conlist(ChallengeIncentive) = Field(...) + submission_types: conlist(ChallengeSubmissionType) = Field(..., alias="submissionTypes") + input_data_types: Optional[conlist(SimpleChallengeInputDataType)] = Field(None, alias="inputDataTypes") + start_date: Optional[date] = Field(None, alias="startDate", description="The start date of the challenge.") + end_date: Optional[date] = Field(None, alias="endDate", description="The end date of the challenge.") + starred_count: StrictInt = Field(..., alias="starredCount", description="The number of times the challenge has been starred by users.") + created_at: datetime = Field(..., alias="createdAt") + updated_at: datetime = Field(..., alias="updatedAt") + __properties = ["id", "slug", "name", "headline", "description", "doi", "status", "difficulty", "platform", "websiteUrl", "avatarUrl", "incentives", "submissionTypes", "inputDataTypes", "startDate", "endDate", "starredCount", "createdAt", "updatedAt"] + + @validator('slug') + def slug_validate_regular_expression(cls, value): + """Validates the regular expression""" + if not re.match(r"^[a-z0-9]+(?:-[a-z0-9]+)*$", value): + raise ValueError(r"must validate the regular expression /^[a-z0-9]+(?:-[a-z0-9]+)*$/") + return value + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Challenge: + """Create an instance of Challenge from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + }, + exclude_none=True) + # override the default output from pydantic by calling `to_dict()` of platform + if self.platform: + _dict['platform'] = self.platform.to_dict() + # override the default output from pydantic by calling `to_dict()` of each item in input_data_types (list) + _items = [] + if self.input_data_types: + for _item in self.input_data_types: + if _item: + _items.append(_item.to_dict()) + _dict['inputDataTypes'] = _items + # set to None if start_date (nullable) is None + # and __fields_set__ contains the field + if self.start_date is None and "start_date" in self.__fields_set__: + _dict['startDate'] = None + + # set to None if end_date (nullable) is None + # and __fields_set__ contains the field + if self.end_date is None and "end_date" in self.__fields_set__: + _dict['endDate'] = None + + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> Challenge: + """Create an instance of Challenge from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return Challenge.parse_obj(obj) + + _obj = Challenge.parse_obj({ + "id": obj.get("id"), + "slug": obj.get("slug"), + "name": obj.get("name"), + "headline": obj.get("headline"), + "description": obj.get("description"), + "doi": obj.get("doi"), + "status": obj.get("status"), + "difficulty": obj.get("difficulty"), + "platform": SimpleChallengePlatform.from_dict(obj.get("platform")) if obj.get("platform") is not None else None, + "website_url": obj.get("websiteUrl"), + "avatar_url": obj.get("avatarUrl"), + "incentives": obj.get("incentives"), + "submission_types": obj.get("submissionTypes"), + "input_data_types": [SimpleChallengeInputDataType.from_dict(_item) for _item in obj.get("inputDataTypes")] if obj.get("inputDataTypes") is not None else None, + "start_date": obj.get("startDate"), + "end_date": obj.get("endDate"), + "starred_count": obj.get("starredCount") if obj.get("starredCount") is not None else 0, + "created_at": obj.get("createdAt"), + "updated_at": obj.get("updatedAt") + }) + return _obj + + diff --git a/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_category.py b/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_category.py new file mode 100644 index 0000000000..04800bbb20 --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_category.py @@ -0,0 +1,43 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import json +import pprint +import re # noqa: F401 +from aenum import Enum, no_arg + + + + + +class ChallengeCategory(str, Enum): + """ + The category of the challenge. + """ + + """ + allowed enum values + """ + FEATURED = 'featured' + STARTING_SOON = 'starting_soon' + ENDING_SOON = 'ending_soon' + RECENTLY_STARTED = 'recently_started' + RECENTLY_ENDED = 'recently_ended' + + @classmethod + def from_json(cls, json_str: str) -> ChallengeCategory: + """Create an instance of ChallengeCategory from a JSON string""" + return ChallengeCategory(json.loads(json_str)) + + diff --git a/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_contribution.py b/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_contribution.py new file mode 100644 index 0000000000..bfa28fd63d --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_contribution.py @@ -0,0 +1,76 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + + + +from pydantic import BaseModel, Field, StrictInt +from openchallenges_client.models.challenge_contribution_role import ChallengeContributionRole + +class ChallengeContribution(BaseModel): + """ + A challenge contribution. + """ + challenge_id: StrictInt = Field(..., alias="challengeId", description="The unique identifier of the challenge.") + organization_id: StrictInt = Field(..., alias="organizationId", description="The unique identifier of an organization") + role: ChallengeContributionRole = Field(...) + __properties = ["challengeId", "organizationId", "role"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> ChallengeContribution: + """Create an instance of ChallengeContribution from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + }, + exclude_none=True) + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> ChallengeContribution: + """Create an instance of ChallengeContribution from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return ChallengeContribution.parse_obj(obj) + + _obj = ChallengeContribution.parse_obj({ + "challenge_id": obj.get("challengeId"), + "organization_id": obj.get("organizationId"), + "role": obj.get("role") + }) + return _obj + + diff --git a/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_contribution_role.py b/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_contribution_role.py new file mode 100644 index 0000000000..e6a228b702 --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_contribution_role.py @@ -0,0 +1,41 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import json +import pprint +import re # noqa: F401 +from aenum import Enum, no_arg + + + + + +class ChallengeContributionRole(str, Enum): + """ + The nature of a challenge contribution. + """ + + """ + allowed enum values + """ + CHALLENGE_ORGANIZER = 'challenge_organizer' + DATA_CONTRIBUTOR = 'data_contributor' + SPONSOR = 'sponsor' + + @classmethod + def from_json(cls, json_str: str) -> ChallengeContributionRole: + """Create an instance of ChallengeContributionRole from a JSON string""" + return ChallengeContributionRole(json.loads(json_str)) + + diff --git a/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_contributions_page.py b/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_contributions_page.py new file mode 100644 index 0000000000..4d861b5e26 --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_contributions_page.py @@ -0,0 +1,91 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + + +from typing import List +from pydantic import BaseModel, Field, StrictBool, StrictInt, conlist +from openchallenges_client.models.challenge_contribution import ChallengeContribution + +class ChallengeContributionsPage(BaseModel): + """ + A page of challenge challenge contributions. + """ + number: StrictInt = Field(..., description="The page number.") + size: StrictInt = Field(..., description="The number of items in a single page.") + total_elements: StrictInt = Field(..., alias="totalElements", description="Total number of elements in the result set.") + total_pages: StrictInt = Field(..., alias="totalPages", description="Total number of pages in the result set.") + has_next: StrictBool = Field(..., alias="hasNext", description="Returns if there is a next page.") + has_previous: StrictBool = Field(..., alias="hasPrevious", description="Returns if there is a previous page.") + challenge_contributions: conlist(ChallengeContribution) = Field(..., alias="challengeContributions", description="A list of challenge contributions.") + __properties = ["number", "size", "totalElements", "totalPages", "hasNext", "hasPrevious", "challengeContributions"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> ChallengeContributionsPage: + """Create an instance of ChallengeContributionsPage from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + }, + exclude_none=True) + # override the default output from pydantic by calling `to_dict()` of each item in challenge_contributions (list) + _items = [] + if self.challenge_contributions: + for _item in self.challenge_contributions: + if _item: + _items.append(_item.to_dict()) + _dict['challengeContributions'] = _items + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> ChallengeContributionsPage: + """Create an instance of ChallengeContributionsPage from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return ChallengeContributionsPage.parse_obj(obj) + + _obj = ChallengeContributionsPage.parse_obj({ + "number": obj.get("number"), + "size": obj.get("size"), + "total_elements": obj.get("totalElements"), + "total_pages": obj.get("totalPages"), + "has_next": obj.get("hasNext"), + "has_previous": obj.get("hasPrevious"), + "challenge_contributions": [ChallengeContribution.from_dict(_item) for _item in obj.get("challengeContributions")] if obj.get("challengeContributions") is not None else None + }) + return _obj + + diff --git a/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_difficulty.py b/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_difficulty.py new file mode 100644 index 0000000000..cf5346c55a --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_difficulty.py @@ -0,0 +1,41 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import json +import pprint +import re # noqa: F401 +from aenum import Enum, no_arg + + + + + +class ChallengeDifficulty(str, Enum): + """ + The difficulty level of a challenge. + """ + + """ + allowed enum values + """ + GOOD_FOR_BEGINNERS = 'good_for_beginners' + INTERMEDIATE = 'intermediate' + ADVANCED = 'advanced' + + @classmethod + def from_json(cls, json_str: str) -> ChallengeDifficulty: + """Create an instance of ChallengeDifficulty from a JSON string""" + return ChallengeDifficulty(json.loads(json_str)) + + diff --git a/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_direction.py b/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_direction.py new file mode 100644 index 0000000000..34613c236f --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_direction.py @@ -0,0 +1,40 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import json +import pprint +import re # noqa: F401 +from aenum import Enum, no_arg + + + + + +class ChallengeDirection(str, Enum): + """ + The direction to sort the results by. + """ + + """ + allowed enum values + """ + ASC = 'asc' + DESC = 'desc' + + @classmethod + def from_json(cls, json_str: str) -> ChallengeDirection: + """Create an instance of ChallengeDirection from a JSON string""" + return ChallengeDirection(json.loads(json_str)) + + diff --git a/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_incentive.py b/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_incentive.py new file mode 100644 index 0000000000..ccc5734f96 --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_incentive.py @@ -0,0 +1,42 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import json +import pprint +import re # noqa: F401 +from aenum import Enum, no_arg + + + + + +class ChallengeIncentive(str, Enum): + """ + The incentive type of the challenge. + """ + + """ + allowed enum values + """ + MONETARY = 'monetary' + PUBLICATION = 'publication' + SPEAKING_ENGAGEMENT = 'speaking_engagement' + OTHER = 'other' + + @classmethod + def from_json(cls, json_str: str) -> ChallengeIncentive: + """Create an instance of ChallengeIncentive from a JSON string""" + return ChallengeIncentive(json.loads(json_str)) + + diff --git a/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_input_data_type.py b/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_input_data_type.py new file mode 100644 index 0000000000..65d7bff0e1 --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_input_data_type.py @@ -0,0 +1,86 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from datetime import datetime + +from pydantic import BaseModel, Field, StrictInt, constr, validator + +class ChallengeInputDataType(BaseModel): + """ + A challenge input data type. + """ + id: StrictInt = Field(..., description="The unique identifier of a challenge input data type.") + slug: constr(strict=True, max_length=30, min_length=3) = Field(..., description="The slug of the challenge input data type.") + name: constr(strict=True, max_length=50, min_length=3) = Field(..., description="The name of the challenge input data type.") + created_at: datetime = Field(..., alias="createdAt") + updated_at: datetime = Field(..., alias="updatedAt") + __properties = ["id", "slug", "name", "createdAt", "updatedAt"] + + @validator('slug') + def slug_validate_regular_expression(cls, value): + """Validates the regular expression""" + if not re.match(r"^[a-z0-9]+(?:-[a-z0-9]+)*$", value): + raise ValueError(r"must validate the regular expression /^[a-z0-9]+(?:-[a-z0-9]+)*$/") + return value + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> ChallengeInputDataType: + """Create an instance of ChallengeInputDataType from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + }, + exclude_none=True) + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> ChallengeInputDataType: + """Create an instance of ChallengeInputDataType from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return ChallengeInputDataType.parse_obj(obj) + + _obj = ChallengeInputDataType.parse_obj({ + "id": obj.get("id"), + "slug": obj.get("slug"), + "name": obj.get("name"), + "created_at": obj.get("createdAt"), + "updated_at": obj.get("updatedAt") + }) + return _obj + + diff --git a/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_input_data_type_direction.py b/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_input_data_type_direction.py new file mode 100644 index 0000000000..35647ce774 --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_input_data_type_direction.py @@ -0,0 +1,40 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import json +import pprint +import re # noqa: F401 +from aenum import Enum, no_arg + + + + + +class ChallengeInputDataTypeDirection(str, Enum): + """ + The direction to sort the results by. + """ + + """ + allowed enum values + """ + ASC = 'asc' + DESC = 'desc' + + @classmethod + def from_json(cls, json_str: str) -> ChallengeInputDataTypeDirection: + """Create an instance of ChallengeInputDataTypeDirection from a JSON string""" + return ChallengeInputDataTypeDirection(json.loads(json_str)) + + diff --git a/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_input_data_type_search_query.py b/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_input_data_type_search_query.py new file mode 100644 index 0000000000..43dbde0f07 --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_input_data_type_search_query.py @@ -0,0 +1,86 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + + +from typing import Optional +from pydantic import BaseModel, Field, StrictStr, conint +from openchallenges_client.models.challenge_input_data_type_direction import ChallengeInputDataTypeDirection +from openchallenges_client.models.challenge_input_data_type_sort import ChallengeInputDataTypeSort + +class ChallengeInputDataTypeSearchQuery(BaseModel): + """ + A challenge input data type search query. + """ + page_number: Optional[conint(strict=True, ge=0)] = Field(0, alias="pageNumber", description="The page number.") + page_size: Optional[conint(strict=True, ge=1)] = Field(100, alias="pageSize", description="The number of items in a single page.") + sort: Optional[ChallengeInputDataTypeSort] = None + direction: Optional[ChallengeInputDataTypeDirection] = None + search_terms: Optional[StrictStr] = Field(None, alias="searchTerms", description="A string of search terms used to filter the results.") + __properties = ["pageNumber", "pageSize", "sort", "direction", "searchTerms"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> ChallengeInputDataTypeSearchQuery: + """Create an instance of ChallengeInputDataTypeSearchQuery from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + }, + exclude_none=True) + # set to None if direction (nullable) is None + # and __fields_set__ contains the field + if self.direction is None and "direction" in self.__fields_set__: + _dict['direction'] = None + + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> ChallengeInputDataTypeSearchQuery: + """Create an instance of ChallengeInputDataTypeSearchQuery from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return ChallengeInputDataTypeSearchQuery.parse_obj(obj) + + _obj = ChallengeInputDataTypeSearchQuery.parse_obj({ + "page_number": obj.get("pageNumber") if obj.get("pageNumber") is not None else 0, + "page_size": obj.get("pageSize") if obj.get("pageSize") is not None else 100, + "sort": obj.get("sort"), + "direction": obj.get("direction"), + "search_terms": obj.get("searchTerms") + }) + return _obj + + diff --git a/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_input_data_type_sort.py b/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_input_data_type_sort.py new file mode 100644 index 0000000000..8d50c70fa8 --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_input_data_type_sort.py @@ -0,0 +1,40 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import json +import pprint +import re # noqa: F401 +from aenum import Enum, no_arg + + + + + +class ChallengeInputDataTypeSort(str, Enum): + """ + What to sort results by. + """ + + """ + allowed enum values + """ + NAME = 'name' + RELEVANCE = 'relevance' + + @classmethod + def from_json(cls, json_str: str) -> ChallengeInputDataTypeSort: + """Create an instance of ChallengeInputDataTypeSort from a JSON string""" + return ChallengeInputDataTypeSort(json.loads(json_str)) + + diff --git a/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_input_data_types_page.py b/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_input_data_types_page.py new file mode 100644 index 0000000000..1113104719 --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_input_data_types_page.py @@ -0,0 +1,91 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + + +from typing import List +from pydantic import BaseModel, Field, StrictBool, StrictInt, conlist +from openchallenges_client.models.challenge_input_data_type import ChallengeInputDataType + +class ChallengeInputDataTypesPage(BaseModel): + """ + A page of challenge input data types. + """ + number: StrictInt = Field(..., description="The page number.") + size: StrictInt = Field(..., description="The number of items in a single page.") + total_elements: StrictInt = Field(..., alias="totalElements", description="Total number of elements in the result set.") + total_pages: StrictInt = Field(..., alias="totalPages", description="Total number of pages in the result set.") + has_next: StrictBool = Field(..., alias="hasNext", description="Returns if there is a next page.") + has_previous: StrictBool = Field(..., alias="hasPrevious", description="Returns if there is a previous page.") + challenge_input_data_types: conlist(ChallengeInputDataType) = Field(..., alias="challengeInputDataTypes", description="A list of challenge input data types.") + __properties = ["number", "size", "totalElements", "totalPages", "hasNext", "hasPrevious", "challengeInputDataTypes"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> ChallengeInputDataTypesPage: + """Create an instance of ChallengeInputDataTypesPage from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + }, + exclude_none=True) + # override the default output from pydantic by calling `to_dict()` of each item in challenge_input_data_types (list) + _items = [] + if self.challenge_input_data_types: + for _item in self.challenge_input_data_types: + if _item: + _items.append(_item.to_dict()) + _dict['challengeInputDataTypes'] = _items + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> ChallengeInputDataTypesPage: + """Create an instance of ChallengeInputDataTypesPage from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return ChallengeInputDataTypesPage.parse_obj(obj) + + _obj = ChallengeInputDataTypesPage.parse_obj({ + "number": obj.get("number"), + "size": obj.get("size"), + "total_elements": obj.get("totalElements"), + "total_pages": obj.get("totalPages"), + "has_next": obj.get("hasNext"), + "has_previous": obj.get("hasPrevious"), + "challenge_input_data_types": [ChallengeInputDataType.from_dict(_item) for _item in obj.get("challengeInputDataTypes")] if obj.get("challengeInputDataTypes") is not None else None + }) + return _obj + + diff --git a/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_platform.py b/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_platform.py new file mode 100644 index 0000000000..d92d9b230e --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_platform.py @@ -0,0 +1,90 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from datetime import datetime + +from pydantic import BaseModel, Field, StrictInt, StrictStr, constr, validator + +class ChallengePlatform(BaseModel): + """ + A challenge platform + """ + id: StrictInt = Field(..., description="The unique identifier of a challenge platform.") + slug: constr(strict=True, max_length=30, min_length=3) = Field(..., description="The slug of the challenge platform.") + name: constr(strict=True, max_length=30, min_length=3) = Field(..., description="The name of the challenge platform.") + avatar_url: StrictStr = Field(..., alias="avatarUrl") + website_url: StrictStr = Field(..., alias="websiteUrl") + created_at: datetime = Field(..., alias="createdAt") + updated_at: datetime = Field(..., alias="updatedAt") + __properties = ["id", "slug", "name", "avatarUrl", "websiteUrl", "createdAt", "updatedAt"] + + @validator('slug') + def slug_validate_regular_expression(cls, value): + """Validates the regular expression""" + if not re.match(r"^[a-z0-9]+(?:-[a-z0-9]+)*$", value): + raise ValueError(r"must validate the regular expression /^[a-z0-9]+(?:-[a-z0-9]+)*$/") + return value + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> ChallengePlatform: + """Create an instance of ChallengePlatform from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + }, + exclude_none=True) + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> ChallengePlatform: + """Create an instance of ChallengePlatform from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return ChallengePlatform.parse_obj(obj) + + _obj = ChallengePlatform.parse_obj({ + "id": obj.get("id"), + "slug": obj.get("slug"), + "name": obj.get("name"), + "avatar_url": obj.get("avatarUrl"), + "website_url": obj.get("websiteUrl"), + "created_at": obj.get("createdAt"), + "updated_at": obj.get("updatedAt") + }) + return _obj + + diff --git a/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_platform_direction.py b/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_platform_direction.py new file mode 100644 index 0000000000..19360663d6 --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_platform_direction.py @@ -0,0 +1,40 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import json +import pprint +import re # noqa: F401 +from aenum import Enum, no_arg + + + + + +class ChallengePlatformDirection(str, Enum): + """ + The direction to sort the results by. + """ + + """ + allowed enum values + """ + ASC = 'asc' + DESC = 'desc' + + @classmethod + def from_json(cls, json_str: str) -> ChallengePlatformDirection: + """Create an instance of ChallengePlatformDirection from a JSON string""" + return ChallengePlatformDirection(json.loads(json_str)) + + diff --git a/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_platform_search_query.py b/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_platform_search_query.py new file mode 100644 index 0000000000..dc26a7d549 --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_platform_search_query.py @@ -0,0 +1,86 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + + +from typing import Optional +from pydantic import BaseModel, Field, StrictStr, conint +from openchallenges_client.models.challenge_platform_direction import ChallengePlatformDirection +from openchallenges_client.models.challenge_platform_sort import ChallengePlatformSort + +class ChallengePlatformSearchQuery(BaseModel): + """ + A challenge platform search query. + """ + page_number: Optional[conint(strict=True, ge=0)] = Field(0, alias="pageNumber", description="The page number.") + page_size: Optional[conint(strict=True, ge=1)] = Field(100, alias="pageSize", description="The number of items in a single page.") + sort: Optional[ChallengePlatformSort] = None + direction: Optional[ChallengePlatformDirection] = None + search_terms: Optional[StrictStr] = Field(None, alias="searchTerms", description="A string of search terms used to filter the results.") + __properties = ["pageNumber", "pageSize", "sort", "direction", "searchTerms"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> ChallengePlatformSearchQuery: + """Create an instance of ChallengePlatformSearchQuery from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + }, + exclude_none=True) + # set to None if direction (nullable) is None + # and __fields_set__ contains the field + if self.direction is None and "direction" in self.__fields_set__: + _dict['direction'] = None + + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> ChallengePlatformSearchQuery: + """Create an instance of ChallengePlatformSearchQuery from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return ChallengePlatformSearchQuery.parse_obj(obj) + + _obj = ChallengePlatformSearchQuery.parse_obj({ + "page_number": obj.get("pageNumber") if obj.get("pageNumber") is not None else 0, + "page_size": obj.get("pageSize") if obj.get("pageSize") is not None else 100, + "sort": obj.get("sort"), + "direction": obj.get("direction"), + "search_terms": obj.get("searchTerms") + }) + return _obj + + diff --git a/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_platform_sort.py b/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_platform_sort.py new file mode 100644 index 0000000000..10b48e3457 --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_platform_sort.py @@ -0,0 +1,40 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import json +import pprint +import re # noqa: F401 +from aenum import Enum, no_arg + + + + + +class ChallengePlatformSort(str, Enum): + """ + What to sort results by. + """ + + """ + allowed enum values + """ + NAME = 'name' + RELEVANCE = 'relevance' + + @classmethod + def from_json(cls, json_str: str) -> ChallengePlatformSort: + """Create an instance of ChallengePlatformSort from a JSON string""" + return ChallengePlatformSort(json.loads(json_str)) + + diff --git a/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_platforms_page.py b/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_platforms_page.py new file mode 100644 index 0000000000..d3ecb9b732 --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_platforms_page.py @@ -0,0 +1,91 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + + +from typing import List +from pydantic import BaseModel, Field, StrictBool, StrictInt, conlist +from openchallenges_client.models.challenge_platform import ChallengePlatform + +class ChallengePlatformsPage(BaseModel): + """ + A page of challenge platforms. + """ + number: StrictInt = Field(..., description="The page number.") + size: StrictInt = Field(..., description="The number of items in a single page.") + total_elements: StrictInt = Field(..., alias="totalElements", description="Total number of elements in the result set.") + total_pages: StrictInt = Field(..., alias="totalPages", description="Total number of pages in the result set.") + has_next: StrictBool = Field(..., alias="hasNext", description="Returns if there is a next page.") + has_previous: StrictBool = Field(..., alias="hasPrevious", description="Returns if there is a previous page.") + challenge_platforms: conlist(ChallengePlatform) = Field(..., alias="challengePlatforms", description="A list of challenge platforms.") + __properties = ["number", "size", "totalElements", "totalPages", "hasNext", "hasPrevious", "challengePlatforms"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> ChallengePlatformsPage: + """Create an instance of ChallengePlatformsPage from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + }, + exclude_none=True) + # override the default output from pydantic by calling `to_dict()` of each item in challenge_platforms (list) + _items = [] + if self.challenge_platforms: + for _item in self.challenge_platforms: + if _item: + _items.append(_item.to_dict()) + _dict['challengePlatforms'] = _items + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> ChallengePlatformsPage: + """Create an instance of ChallengePlatformsPage from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return ChallengePlatformsPage.parse_obj(obj) + + _obj = ChallengePlatformsPage.parse_obj({ + "number": obj.get("number"), + "size": obj.get("size"), + "total_elements": obj.get("totalElements"), + "total_pages": obj.get("totalPages"), + "has_next": obj.get("hasNext"), + "has_previous": obj.get("hasPrevious"), + "challenge_platforms": [ChallengePlatform.from_dict(_item) for _item in obj.get("challengePlatforms")] if obj.get("challengePlatforms") is not None else None + }) + return _obj + + diff --git a/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_search_query.py b/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_search_query.py new file mode 100644 index 0000000000..429e94f1a7 --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_search_query.py @@ -0,0 +1,128 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from datetime import date +from typing import List, Optional +from pydantic import BaseModel, Field, StrictInt, StrictStr, conint, conlist, constr, validator +from openchallenges_client.models.challenge_category import ChallengeCategory +from openchallenges_client.models.challenge_difficulty import ChallengeDifficulty +from openchallenges_client.models.challenge_direction import ChallengeDirection +from openchallenges_client.models.challenge_incentive import ChallengeIncentive +from openchallenges_client.models.challenge_sort import ChallengeSort +from openchallenges_client.models.challenge_status import ChallengeStatus +from openchallenges_client.models.challenge_submission_type import ChallengeSubmissionType + +class ChallengeSearchQuery(BaseModel): + """ + A challenge search query. + """ + page_number: Optional[conint(strict=True, ge=0)] = Field(0, alias="pageNumber", description="The page number.") + page_size: Optional[conint(strict=True, ge=1)] = Field(100, alias="pageSize", description="The number of items in a single page.") + sort: Optional[ChallengeSort] = None + sort_seed: Optional[conint(strict=True, le=2147483647, ge=0)] = Field(None, alias="sortSeed", description="The seed that initializes the random sorter.") + direction: Optional[ChallengeDirection] = None + difficulties: Optional[conlist(ChallengeDifficulty)] = Field(None, description="An array of challenge difficulty levels used to filter the results.") + incentives: Optional[conlist(ChallengeIncentive)] = Field(None, description="An array of challenge incentive types used to filter the results.") + min_start_date: Optional[date] = Field(None, alias="minStartDate", description="Keep the challenges that start at this date or later.") + max_start_date: Optional[date] = Field(None, alias="maxStartDate", description="Keep the challenges that start at this date or sooner.") + platforms: Optional[conlist(constr(strict=True, max_length=30, min_length=3))] = Field(None, description="An array of challenge platform ids used to filter the results.") + organizations: Optional[conlist(StrictInt)] = Field(None, description="An array of organization ids used to filter the results.") + input_data_types: Optional[conlist(constr(strict=True, max_length=30, min_length=3))] = Field(None, alias="inputDataTypes", description="An array of challenge input data type ids used to filter the results.") + status: Optional[conlist(ChallengeStatus)] = Field(None, description="An array of challenge status used to filter the results.") + submission_types: Optional[conlist(ChallengeSubmissionType)] = Field(None, alias="submissionTypes", description="An array of challenge submission types used to filter the results.") + categories: Optional[conlist(ChallengeCategory)] = Field(None, description="The array of challenge categories used to filter the results.") + search_terms: Optional[StrictStr] = Field(None, alias="searchTerms", description="A string of search terms used to filter the results.") + __properties = ["pageNumber", "pageSize", "sort", "sortSeed", "direction", "difficulties", "incentives", "minStartDate", "maxStartDate", "platforms", "organizations", "inputDataTypes", "status", "submissionTypes", "categories", "searchTerms"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> ChallengeSearchQuery: + """Create an instance of ChallengeSearchQuery from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + }, + exclude_none=True) + # set to None if sort_seed (nullable) is None + # and __fields_set__ contains the field + if self.sort_seed is None and "sort_seed" in self.__fields_set__: + _dict['sortSeed'] = None + + # set to None if direction (nullable) is None + # and __fields_set__ contains the field + if self.direction is None and "direction" in self.__fields_set__: + _dict['direction'] = None + + # set to None if min_start_date (nullable) is None + # and __fields_set__ contains the field + if self.min_start_date is None and "min_start_date" in self.__fields_set__: + _dict['minStartDate'] = None + + # set to None if max_start_date (nullable) is None + # and __fields_set__ contains the field + if self.max_start_date is None and "max_start_date" in self.__fields_set__: + _dict['maxStartDate'] = None + + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> ChallengeSearchQuery: + """Create an instance of ChallengeSearchQuery from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return ChallengeSearchQuery.parse_obj(obj) + + _obj = ChallengeSearchQuery.parse_obj({ + "page_number": obj.get("pageNumber") if obj.get("pageNumber") is not None else 0, + "page_size": obj.get("pageSize") if obj.get("pageSize") is not None else 100, + "sort": obj.get("sort"), + "sort_seed": obj.get("sortSeed"), + "direction": obj.get("direction"), + "difficulties": obj.get("difficulties"), + "incentives": obj.get("incentives"), + "min_start_date": obj.get("minStartDate"), + "max_start_date": obj.get("maxStartDate"), + "platforms": obj.get("platforms"), + "organizations": obj.get("organizations"), + "input_data_types": obj.get("inputDataTypes"), + "status": obj.get("status"), + "submission_types": obj.get("submissionTypes"), + "categories": obj.get("categories"), + "search_terms": obj.get("searchTerms") + }) + return _obj + + diff --git a/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_sort.py b/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_sort.py new file mode 100644 index 0000000000..40e1c16442 --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_sort.py @@ -0,0 +1,44 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import json +import pprint +import re # noqa: F401 +from aenum import Enum, no_arg + + + + + +class ChallengeSort(str, Enum): + """ + What to sort results by. + """ + + """ + allowed enum values + """ + CREATED = 'created' + RANDOM = 'random' + RELEVANCE = 'relevance' + STARRED = 'starred' + START_DATE = 'start_date' + END_DATE = 'end_date' + + @classmethod + def from_json(cls, json_str: str) -> ChallengeSort: + """Create an instance of ChallengeSort from a JSON string""" + return ChallengeSort(json.loads(json_str)) + + diff --git a/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_status.py b/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_status.py new file mode 100644 index 0000000000..c349548de3 --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_status.py @@ -0,0 +1,41 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import json +import pprint +import re # noqa: F401 +from aenum import Enum, no_arg + + + + + +class ChallengeStatus(str, Enum): + """ + The status of the challenge. + """ + + """ + allowed enum values + """ + UPCOMING = 'upcoming' + ACTIVE = 'active' + COMPLETED = 'completed' + + @classmethod + def from_json(cls, json_str: str) -> ChallengeStatus: + """Create an instance of ChallengeStatus from a JSON string""" + return ChallengeStatus(json.loads(json_str)) + + diff --git a/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_submission_type.py b/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_submission_type.py new file mode 100644 index 0000000000..49742318e2 --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/models/challenge_submission_type.py @@ -0,0 +1,42 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import json +import pprint +import re # noqa: F401 +from aenum import Enum, no_arg + + + + + +class ChallengeSubmissionType(str, Enum): + """ + The submission type of the challenge. + """ + + """ + allowed enum values + """ + CONTAINER_IMAGE = 'container_image' + PREDICTION_FILE = 'prediction_file' + NOTEBOOK = 'notebook' + OTHER = 'other' + + @classmethod + def from_json(cls, json_str: str) -> ChallengeSubmissionType: + """Create an instance of ChallengeSubmissionType from a JSON string""" + return ChallengeSubmissionType(json.loads(json_str)) + + diff --git a/libs/openchallenges/api-client-python/openchallenges_client/models/challenges_page.py b/libs/openchallenges/api-client-python/openchallenges_client/models/challenges_page.py new file mode 100644 index 0000000000..8c7ce324c4 --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/models/challenges_page.py @@ -0,0 +1,91 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + + +from typing import List +from pydantic import BaseModel, Field, StrictBool, StrictInt, conlist +from openchallenges_client.models.challenge import Challenge + +class ChallengesPage(BaseModel): + """ + A page of challenges. + """ + number: StrictInt = Field(..., description="The page number.") + size: StrictInt = Field(..., description="The number of items in a single page.") + total_elements: StrictInt = Field(..., alias="totalElements", description="Total number of elements in the result set.") + total_pages: StrictInt = Field(..., alias="totalPages", description="Total number of pages in the result set.") + has_next: StrictBool = Field(..., alias="hasNext", description="Returns if there is a next page.") + has_previous: StrictBool = Field(..., alias="hasPrevious", description="Returns if there is a previous page.") + challenges: conlist(Challenge) = Field(..., description="A list of challenges.") + __properties = ["number", "size", "totalElements", "totalPages", "hasNext", "hasPrevious", "challenges"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> ChallengesPage: + """Create an instance of ChallengesPage from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + }, + exclude_none=True) + # override the default output from pydantic by calling `to_dict()` of each item in challenges (list) + _items = [] + if self.challenges: + for _item in self.challenges: + if _item: + _items.append(_item.to_dict()) + _dict['challenges'] = _items + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> ChallengesPage: + """Create an instance of ChallengesPage from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return ChallengesPage.parse_obj(obj) + + _obj = ChallengesPage.parse_obj({ + "number": obj.get("number"), + "size": obj.get("size"), + "total_elements": obj.get("totalElements"), + "total_pages": obj.get("totalPages"), + "has_next": obj.get("hasNext"), + "has_previous": obj.get("hasPrevious"), + "challenges": [Challenge.from_dict(_item) for _item in obj.get("challenges")] if obj.get("challenges") is not None else None + }) + return _obj + + diff --git a/libs/openchallenges/api-client-python/openchallenges_client/models/challenges_per_year.py b/libs/openchallenges/api-client-python/openchallenges_client/models/challenges_per_year.py new file mode 100644 index 0000000000..17036dfdec --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/models/challenges_per_year.py @@ -0,0 +1,73 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + + +from typing import List +from pydantic import BaseModel, Field, StrictInt, StrictStr, conlist + +class ChallengesPerYear(BaseModel): + """ + An object + """ + years: conlist(StrictStr) = Field(...) + challenge_counts: conlist(StrictInt) = Field(..., alias="challengeCounts") + __properties = ["years", "challengeCounts"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> ChallengesPerYear: + """Create an instance of ChallengesPerYear from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + }, + exclude_none=True) + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> ChallengesPerYear: + """Create an instance of ChallengesPerYear from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return ChallengesPerYear.parse_obj(obj) + + _obj = ChallengesPerYear.parse_obj({ + "years": obj.get("years"), + "challenge_counts": obj.get("challengeCounts") + }) + return _obj + + diff --git a/libs/openchallenges/api-client-python/openchallenges_client/models/image.py b/libs/openchallenges/api-client-python/openchallenges_client/models/image.py new file mode 100644 index 0000000000..5fd2aee681 --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/models/image.py @@ -0,0 +1,71 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + + + +from pydantic import BaseModel, Field, StrictStr + +class Image(BaseModel): + """ + An image + """ + url: StrictStr = Field(...) + __properties = ["url"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Image: + """Create an instance of Image from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + }, + exclude_none=True) + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> Image: + """Create an instance of Image from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return Image.parse_obj(obj) + + _obj = Image.parse_obj({ + "url": obj.get("url") + }) + return _obj + + diff --git a/libs/openchallenges/api-client-python/openchallenges_client/models/image_aspect_ratio.py b/libs/openchallenges/api-client-python/openchallenges_client/models/image_aspect_ratio.py new file mode 100644 index 0000000000..1c83c72f37 --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/models/image_aspect_ratio.py @@ -0,0 +1,43 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import json +import pprint +import re # noqa: F401 +from aenum import Enum, no_arg + + + + + +class ImageAspectRatio(str, Enum): + """ + The aspect ratio of the image (the height of the image must be specified). + """ + + """ + allowed enum values + """ + ORIGINAL = 'original' + ENUM_16_9 = '16_9' + ENUM_1_1 = '1_1' + ENUM_3_2 = '3_2' + ENUM_2_3 = '2_3' + + @classmethod + def from_json(cls, json_str: str) -> ImageAspectRatio: + """Create an instance of ImageAspectRatio from a JSON string""" + return ImageAspectRatio(json.loads(json_str)) + + diff --git a/libs/openchallenges/api-client-python/openchallenges_client/models/image_height.py b/libs/openchallenges/api-client-python/openchallenges_client/models/image_height.py new file mode 100644 index 0000000000..524542f17f --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/models/image_height.py @@ -0,0 +1,44 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import json +import pprint +import re # noqa: F401 +from aenum import Enum, no_arg + + + + + +class ImageHeight(str, Enum): + """ + The height of the image. + """ + + """ + allowed enum values + """ + ORIGINAL = 'original' + ENUM_32PX = '32px' + ENUM_100PX = '100px' + ENUM_140PX = '140px' + ENUM_250PX = '250px' + ENUM_500PX = '500px' + + @classmethod + def from_json(cls, json_str: str) -> ImageHeight: + """Create an instance of ImageHeight from a JSON string""" + return ImageHeight(json.loads(json_str)) + + diff --git a/libs/openchallenges/api-client-python/openchallenges_client/models/image_query.py b/libs/openchallenges/api-client-python/openchallenges_client/models/image_query.py new file mode 100644 index 0000000000..8bd8df5ca5 --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/models/image_query.py @@ -0,0 +1,84 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + + +from typing import Optional +from pydantic import BaseModel, Field, constr, validator +from openchallenges_client.models.image_aspect_ratio import ImageAspectRatio +from openchallenges_client.models.image_height import ImageHeight + +class ImageQuery(BaseModel): + """ + An image query. + """ + object_key: constr(strict=True) = Field(..., alias="objectKey", description="The unique identifier of the image.") + height: Optional[ImageHeight] = None + aspect_ratio: Optional[ImageAspectRatio] = Field(None, alias="aspectRatio") + __properties = ["objectKey", "height", "aspectRatio"] + + @validator('object_key') + def object_key_validate_regular_expression(cls, value): + """Validates the regular expression""" + if not re.match(r"^[a-zA-Z0-9\/_-]+.[a-zA-Z0-9\/_-]+", value): + raise ValueError(r"must validate the regular expression /^[a-zA-Z0-9\/_-]+.[a-zA-Z0-9\/_-]+/") + return value + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> ImageQuery: + """Create an instance of ImageQuery from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + }, + exclude_none=True) + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> ImageQuery: + """Create an instance of ImageQuery from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return ImageQuery.parse_obj(obj) + + _obj = ImageQuery.parse_obj({ + "object_key": obj.get("objectKey"), + "height": obj.get("height"), + "aspect_ratio": obj.get("aspectRatio") + }) + return _obj + + diff --git a/libs/openchallenges/api-client-python/openchallenges_client/models/organization.py b/libs/openchallenges/api-client-python/openchallenges_client/models/organization.py new file mode 100644 index 0000000000..6cf06e0e64 --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/models/organization.py @@ -0,0 +1,98 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from datetime import datetime +from typing import Optional +from pydantic import BaseModel, Field, StrictInt, StrictStr, conint, constr, validator + +class Organization(BaseModel): + """ + An organization + """ + id: StrictInt = Field(..., description="The unique identifier of an organization") + name: StrictStr = Field(...) + email: StrictStr = Field(..., description="An email address.") + login: constr(strict=True, max_length=64, min_length=2) = Field(..., description="The login of an organization") + description: StrictStr = Field(...) + avatar_key: Optional[StrictStr] = Field(None, alias="avatarKey") + website_url: StrictStr = Field(..., alias="websiteUrl") + challenge_count: Optional[conint(strict=True, ge=0)] = Field(None, alias="challengeCount") + created_at: datetime = Field(..., alias="createdAt") + updated_at: datetime = Field(..., alias="updatedAt") + acronym: Optional[StrictStr] = None + __properties = ["id", "name", "email", "login", "description", "avatarKey", "websiteUrl", "challengeCount", "createdAt", "updatedAt", "acronym"] + + @validator('login') + def login_validate_regular_expression(cls, value): + """Validates the regular expression""" + if not re.match(r"^[a-z0-9]+(?:-[a-z0-9]+)*$", value): + raise ValueError(r"must validate the regular expression /^[a-z0-9]+(?:-[a-z0-9]+)*$/") + return value + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Organization: + """Create an instance of Organization from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + }, + exclude_none=True) + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> Organization: + """Create an instance of Organization from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return Organization.parse_obj(obj) + + _obj = Organization.parse_obj({ + "id": obj.get("id"), + "name": obj.get("name"), + "email": obj.get("email"), + "login": obj.get("login"), + "description": obj.get("description"), + "avatar_key": obj.get("avatarKey"), + "website_url": obj.get("websiteUrl"), + "challenge_count": obj.get("challengeCount"), + "created_at": obj.get("createdAt"), + "updated_at": obj.get("updatedAt"), + "acronym": obj.get("acronym") + }) + return _obj + + diff --git a/libs/openchallenges/api-client-python/openchallenges_client/models/organization_category.py b/libs/openchallenges/api-client-python/openchallenges_client/models/organization_category.py new file mode 100644 index 0000000000..c14c979a11 --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/models/organization_category.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import json +import pprint +import re # noqa: F401 +from aenum import Enum, no_arg + + + + + +class OrganizationCategory(str, Enum): + """ + The category of the organization. + """ + + """ + allowed enum values + """ + FEATURED = 'featured' + + @classmethod + def from_json(cls, json_str: str) -> OrganizationCategory: + """Create an instance of OrganizationCategory from a JSON string""" + return OrganizationCategory(json.loads(json_str)) + + diff --git a/libs/openchallenges/api-client-python/openchallenges_client/models/organization_direction.py b/libs/openchallenges/api-client-python/openchallenges_client/models/organization_direction.py new file mode 100644 index 0000000000..a6904a76dc --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/models/organization_direction.py @@ -0,0 +1,40 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import json +import pprint +import re # noqa: F401 +from aenum import Enum, no_arg + + + + + +class OrganizationDirection(str, Enum): + """ + The direction to sort the results by. + """ + + """ + allowed enum values + """ + ASC = 'asc' + DESC = 'desc' + + @classmethod + def from_json(cls, json_str: str) -> OrganizationDirection: + """Create an instance of OrganizationDirection from a JSON string""" + return OrganizationDirection(json.loads(json_str)) + + diff --git a/libs/openchallenges/api-client-python/openchallenges_client/models/organization_search_query.py b/libs/openchallenges/api-client-python/openchallenges_client/models/organization_search_query.py new file mode 100644 index 0000000000..56825e228a --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/models/organization_search_query.py @@ -0,0 +1,92 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + + +from typing import List, Optional +from pydantic import BaseModel, Field, StrictStr, conint, conlist +from openchallenges_client.models.challenge_contribution_role import ChallengeContributionRole +from openchallenges_client.models.organization_category import OrganizationCategory +from openchallenges_client.models.organization_direction import OrganizationDirection +from openchallenges_client.models.organization_sort import OrganizationSort + +class OrganizationSearchQuery(BaseModel): + """ + An organization search query. + """ + page_number: Optional[conint(strict=True, ge=0)] = Field(0, alias="pageNumber", description="The page number.") + page_size: Optional[conint(strict=True, ge=1)] = Field(100, alias="pageSize", description="The number of items in a single page.") + categories: Optional[conlist(OrganizationCategory)] = Field(None, description="The array of organization categories used to filter the results.") + challenge_contribution_roles: Optional[conlist(ChallengeContributionRole)] = Field(None, alias="challengeContributionRoles", description="An array of challenge contribution roles used to filter the results.") + sort: Optional[OrganizationSort] = None + direction: Optional[OrganizationDirection] = None + search_terms: Optional[StrictStr] = Field(None, alias="searchTerms", description="A string of search terms used to filter the results.") + __properties = ["pageNumber", "pageSize", "categories", "challengeContributionRoles", "sort", "direction", "searchTerms"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> OrganizationSearchQuery: + """Create an instance of OrganizationSearchQuery from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + }, + exclude_none=True) + # set to None if direction (nullable) is None + # and __fields_set__ contains the field + if self.direction is None and "direction" in self.__fields_set__: + _dict['direction'] = None + + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> OrganizationSearchQuery: + """Create an instance of OrganizationSearchQuery from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return OrganizationSearchQuery.parse_obj(obj) + + _obj = OrganizationSearchQuery.parse_obj({ + "page_number": obj.get("pageNumber") if obj.get("pageNumber") is not None else 0, + "page_size": obj.get("pageSize") if obj.get("pageSize") is not None else 100, + "categories": obj.get("categories"), + "challenge_contribution_roles": obj.get("challengeContributionRoles"), + "sort": obj.get("sort"), + "direction": obj.get("direction"), + "search_terms": obj.get("searchTerms") + }) + return _obj + + diff --git a/libs/openchallenges/api-client-python/openchallenges_client/models/organization_sort.py b/libs/openchallenges/api-client-python/openchallenges_client/models/organization_sort.py new file mode 100644 index 0000000000..a4e3663356 --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/models/organization_sort.py @@ -0,0 +1,42 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import json +import pprint +import re # noqa: F401 +from aenum import Enum, no_arg + + + + + +class OrganizationSort(str, Enum): + """ + What to sort results by. + """ + + """ + allowed enum values + """ + CHALLENGE_COUNT = 'challenge_count' + CREATED = 'created' + NAME = 'name' + RELEVANCE = 'relevance' + + @classmethod + def from_json(cls, json_str: str) -> OrganizationSort: + """Create an instance of OrganizationSort from a JSON string""" + return OrganizationSort(json.loads(json_str)) + + diff --git a/libs/openchallenges/api-client-python/openchallenges_client/models/organizations_page.py b/libs/openchallenges/api-client-python/openchallenges_client/models/organizations_page.py new file mode 100644 index 0000000000..8de52fe87a --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/models/organizations_page.py @@ -0,0 +1,91 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + + +from typing import List +from pydantic import BaseModel, Field, StrictBool, StrictInt, conlist +from openchallenges_client.models.organization import Organization + +class OrganizationsPage(BaseModel): + """ + A page of organizations + """ + number: StrictInt = Field(..., description="The page number.") + size: StrictInt = Field(..., description="The number of items in a single page.") + total_elements: StrictInt = Field(..., alias="totalElements", description="Total number of elements in the result set.") + total_pages: StrictInt = Field(..., alias="totalPages", description="Total number of pages in the result set.") + has_next: StrictBool = Field(..., alias="hasNext", description="Returns if there is a next page.") + has_previous: StrictBool = Field(..., alias="hasPrevious", description="Returns if there is a previous page.") + organizations: conlist(Organization) = Field(..., description="A list of organizations") + __properties = ["number", "size", "totalElements", "totalPages", "hasNext", "hasPrevious", "organizations"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> OrganizationsPage: + """Create an instance of OrganizationsPage from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + }, + exclude_none=True) + # override the default output from pydantic by calling `to_dict()` of each item in organizations (list) + _items = [] + if self.organizations: + for _item in self.organizations: + if _item: + _items.append(_item.to_dict()) + _dict['organizations'] = _items + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> OrganizationsPage: + """Create an instance of OrganizationsPage from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return OrganizationsPage.parse_obj(obj) + + _obj = OrganizationsPage.parse_obj({ + "number": obj.get("number"), + "size": obj.get("size"), + "total_elements": obj.get("totalElements"), + "total_pages": obj.get("totalPages"), + "has_next": obj.get("hasNext"), + "has_previous": obj.get("hasPrevious"), + "organizations": [Organization.from_dict(_item) for _item in obj.get("organizations")] if obj.get("organizations") is not None else None + }) + return _obj + + diff --git a/libs/openchallenges/api-client-python/openchallenges_client/models/page_metadata.py b/libs/openchallenges/api-client-python/openchallenges_client/models/page_metadata.py new file mode 100644 index 0000000000..ab0ee44c91 --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/models/page_metadata.py @@ -0,0 +1,81 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + + + +from pydantic import BaseModel, Field, StrictBool, StrictInt + +class PageMetadata(BaseModel): + """ + The metadata of a page. + """ + number: StrictInt = Field(..., description="The page number.") + size: StrictInt = Field(..., description="The number of items in a single page.") + total_elements: StrictInt = Field(..., alias="totalElements", description="Total number of elements in the result set.") + total_pages: StrictInt = Field(..., alias="totalPages", description="Total number of pages in the result set.") + has_next: StrictBool = Field(..., alias="hasNext", description="Returns if there is a next page.") + has_previous: StrictBool = Field(..., alias="hasPrevious", description="Returns if there is a previous page.") + __properties = ["number", "size", "totalElements", "totalPages", "hasNext", "hasPrevious"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> PageMetadata: + """Create an instance of PageMetadata from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + }, + exclude_none=True) + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> PageMetadata: + """Create an instance of PageMetadata from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return PageMetadata.parse_obj(obj) + + _obj = PageMetadata.parse_obj({ + "number": obj.get("number"), + "size": obj.get("size"), + "total_elements": obj.get("totalElements"), + "total_pages": obj.get("totalPages"), + "has_next": obj.get("hasNext"), + "has_previous": obj.get("hasPrevious") + }) + return _obj + + diff --git a/libs/openchallenges/api-client-python/openchallenges_client/models/simple_challenge_input_data_type.py b/libs/openchallenges/api-client-python/openchallenges_client/models/simple_challenge_input_data_type.py new file mode 100644 index 0000000000..d50508c1a7 --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/models/simple_challenge_input_data_type.py @@ -0,0 +1,82 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + + + +from pydantic import BaseModel, Field, StrictInt, constr, validator + +class SimpleChallengeInputDataType(BaseModel): + """ + A simple challenge input data type. + """ + id: StrictInt = Field(..., description="The unique identifier of a challenge input data type.") + slug: constr(strict=True, max_length=30, min_length=3) = Field(..., description="The slug of the challenge input data type.") + name: constr(strict=True, max_length=50, min_length=3) = Field(..., description="The name of the challenge input data type.") + __properties = ["id", "slug", "name"] + + @validator('slug') + def slug_validate_regular_expression(cls, value): + """Validates the regular expression""" + if not re.match(r"^[a-z0-9]+(?:-[a-z0-9]+)*$", value): + raise ValueError(r"must validate the regular expression /^[a-z0-9]+(?:-[a-z0-9]+)*$/") + return value + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> SimpleChallengeInputDataType: + """Create an instance of SimpleChallengeInputDataType from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + }, + exclude_none=True) + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> SimpleChallengeInputDataType: + """Create an instance of SimpleChallengeInputDataType from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return SimpleChallengeInputDataType.parse_obj(obj) + + _obj = SimpleChallengeInputDataType.parse_obj({ + "id": obj.get("id"), + "slug": obj.get("slug"), + "name": obj.get("name") + }) + return _obj + + diff --git a/libs/openchallenges/api-client-python/openchallenges_client/models/simple_challenge_platform.py b/libs/openchallenges/api-client-python/openchallenges_client/models/simple_challenge_platform.py new file mode 100644 index 0000000000..0450e1dec1 --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/models/simple_challenge_platform.py @@ -0,0 +1,82 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + + + +from pydantic import BaseModel, Field, StrictInt, constr, validator + +class SimpleChallengePlatform(BaseModel): + """ + A simple challenge platform. + """ + id: StrictInt = Field(..., description="The unique identifier of a challenge platform.") + slug: constr(strict=True, max_length=30, min_length=3) = Field(..., description="The slug of the challenge platform.") + name: constr(strict=True, max_length=30, min_length=3) = Field(..., description="The name of the challenge platform.") + __properties = ["id", "slug", "name"] + + @validator('slug') + def slug_validate_regular_expression(cls, value): + """Validates the regular expression""" + if not re.match(r"^[a-z0-9]+(?:-[a-z0-9]+)*$", value): + raise ValueError(r"must validate the regular expression /^[a-z0-9]+(?:-[a-z0-9]+)*$/") + return value + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> SimpleChallengePlatform: + """Create an instance of SimpleChallengePlatform from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + }, + exclude_none=True) + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> SimpleChallengePlatform: + """Create an instance of SimpleChallengePlatform from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return SimpleChallengePlatform.parse_obj(obj) + + _obj = SimpleChallengePlatform.parse_obj({ + "id": obj.get("id"), + "slug": obj.get("slug"), + "name": obj.get("name") + }) + return _obj + + diff --git a/libs/openchallenges/api-client-python/openchallenges_client/models/user.py b/libs/openchallenges/api-client-python/openchallenges_client/models/user.py new file mode 100644 index 0000000000..29090e7fd8 --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/models/user.py @@ -0,0 +1,105 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from datetime import datetime +from typing import Optional +from pydantic import BaseModel, Field, StrictInt, StrictStr +from openchallenges_client.models.user_status import UserStatus + +class User(BaseModel): + """ + A simple user + """ + id: Optional[StrictInt] = Field(None, description="The unique identifier of an account") + login: StrictStr = Field(...) + email: StrictStr = Field(..., description="An email address.") + name: Optional[StrictStr] = None + status: Optional[UserStatus] = None + avatar_url: Optional[StrictStr] = Field(None, alias="avatarUrl") + created_at: datetime = Field(..., alias="createdAt") + updated_at: datetime = Field(..., alias="updatedAt") + type: StrictStr = Field(...) + bio: Optional[StrictStr] = None + __properties = ["id", "login", "email", "name", "status", "avatarUrl", "createdAt", "updatedAt", "type", "bio"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> User: + """Create an instance of User from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + }, + exclude_none=True) + # set to None if name (nullable) is None + # and __fields_set__ contains the field + if self.name is None and "name" in self.__fields_set__: + _dict['name'] = None + + # set to None if avatar_url (nullable) is None + # and __fields_set__ contains the field + if self.avatar_url is None and "avatar_url" in self.__fields_set__: + _dict['avatarUrl'] = None + + # set to None if bio (nullable) is None + # and __fields_set__ contains the field + if self.bio is None and "bio" in self.__fields_set__: + _dict['bio'] = None + + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> User: + """Create an instance of User from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return User.parse_obj(obj) + + _obj = User.parse_obj({ + "id": obj.get("id"), + "login": obj.get("login"), + "email": obj.get("email"), + "name": obj.get("name"), + "status": obj.get("status"), + "avatar_url": obj.get("avatarUrl"), + "created_at": obj.get("createdAt"), + "updated_at": obj.get("updatedAt"), + "type": obj.get("type"), + "bio": obj.get("bio") + }) + return _obj + + diff --git a/libs/openchallenges/api-client-python/openchallenges_client/models/user_create_request.py b/libs/openchallenges/api-client-python/openchallenges_client/models/user_create_request.py new file mode 100644 index 0000000000..31f1014e93 --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/models/user_create_request.py @@ -0,0 +1,96 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + + +from typing import Optional +from pydantic import BaseModel, Field, SecretStr, StrictStr + +class UserCreateRequest(BaseModel): + """ + The information required to create a user account + """ + login: StrictStr = Field(...) + email: StrictStr = Field(..., description="An email address.") + password: SecretStr = Field(...) + name: Optional[StrictStr] = None + avatar_url: Optional[StrictStr] = Field(None, alias="avatarUrl") + bio: Optional[StrictStr] = None + __properties = ["login", "email", "password", "name", "avatarUrl", "bio"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> UserCreateRequest: + """Create an instance of UserCreateRequest from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + }, + exclude_none=True) + # set to None if name (nullable) is None + # and __fields_set__ contains the field + if self.name is None and "name" in self.__fields_set__: + _dict['name'] = None + + # set to None if avatar_url (nullable) is None + # and __fields_set__ contains the field + if self.avatar_url is None and "avatar_url" in self.__fields_set__: + _dict['avatarUrl'] = None + + # set to None if bio (nullable) is None + # and __fields_set__ contains the field + if self.bio is None and "bio" in self.__fields_set__: + _dict['bio'] = None + + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> UserCreateRequest: + """Create an instance of UserCreateRequest from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return UserCreateRequest.parse_obj(obj) + + _obj = UserCreateRequest.parse_obj({ + "login": obj.get("login"), + "email": obj.get("email"), + "password": obj.get("password"), + "name": obj.get("name"), + "avatar_url": obj.get("avatarUrl"), + "bio": obj.get("bio") + }) + return _obj + + diff --git a/libs/openchallenges/api-client-python/openchallenges_client/models/user_create_response.py b/libs/openchallenges/api-client-python/openchallenges_client/models/user_create_response.py new file mode 100644 index 0000000000..cdb3217ef9 --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/models/user_create_response.py @@ -0,0 +1,71 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + + + +from pydantic import BaseModel, Field, StrictInt + +class UserCreateResponse(BaseModel): + """ + The response returned after the creation of the user + """ + id: StrictInt = Field(..., description="The unique identifier of an account") + __properties = ["id"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> UserCreateResponse: + """Create an instance of UserCreateResponse from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + }, + exclude_none=True) + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> UserCreateResponse: + """Create an instance of UserCreateResponse from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return UserCreateResponse.parse_obj(obj) + + _obj = UserCreateResponse.parse_obj({ + "id": obj.get("id") + }) + return _obj + + diff --git a/libs/openchallenges/api-client-python/openchallenges_client/models/user_status.py b/libs/openchallenges/api-client-python/openchallenges_client/models/user_status.py new file mode 100644 index 0000000000..4696ce6833 --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/models/user_status.py @@ -0,0 +1,42 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import json +import pprint +import re # noqa: F401 +from aenum import Enum, no_arg + + + + + +class UserStatus(str, Enum): + """ + The account status of a user + """ + + """ + allowed enum values + """ + PENDING = 'pending' + APPROVED = 'approved' + DISABLED = 'disabled' + BLACKLIST = 'blacklist' + + @classmethod + def from_json(cls, json_str: str) -> UserStatus: + """Create an instance of UserStatus from a JSON string""" + return UserStatus(json.loads(json_str)) + + diff --git a/libs/openchallenges/api-client-python/openchallenges_client/models/users_page.py b/libs/openchallenges/api-client-python/openchallenges_client/models/users_page.py new file mode 100644 index 0000000000..4c9e2cbca5 --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/models/users_page.py @@ -0,0 +1,91 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + + +from typing import List +from pydantic import BaseModel, Field, StrictBool, StrictInt, conlist +from openchallenges_client.models.user import User + +class UsersPage(BaseModel): + """ + A page of users + """ + number: StrictInt = Field(..., description="The page number.") + size: StrictInt = Field(..., description="The number of items in a single page.") + total_elements: StrictInt = Field(..., alias="totalElements", description="Total number of elements in the result set.") + total_pages: StrictInt = Field(..., alias="totalPages", description="Total number of pages in the result set.") + has_next: StrictBool = Field(..., alias="hasNext", description="Returns if there is a next page.") + has_previous: StrictBool = Field(..., alias="hasPrevious", description="Returns if there is a previous page.") + users: conlist(User) = Field(..., description="A list of users") + __properties = ["number", "size", "totalElements", "totalPages", "hasNext", "hasPrevious", "users"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> UsersPage: + """Create an instance of UsersPage from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, + exclude={ + }, + exclude_none=True) + # override the default output from pydantic by calling `to_dict()` of each item in users (list) + _items = [] + if self.users: + for _item in self.users: + if _item: + _items.append(_item.to_dict()) + _dict['users'] = _items + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> UsersPage: + """Create an instance of UsersPage from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return UsersPage.parse_obj(obj) + + _obj = UsersPage.parse_obj({ + "number": obj.get("number"), + "size": obj.get("size"), + "total_elements": obj.get("totalElements"), + "total_pages": obj.get("totalPages"), + "has_next": obj.get("hasNext"), + "has_previous": obj.get("hasPrevious"), + "users": [User.from_dict(_item) for _item in obj.get("users")] if obj.get("users") is not None else None + }) + return _obj + + diff --git a/libs/openchallenges/api-client-python/openchallenges_client/py.typed b/libs/openchallenges/api-client-python/openchallenges_client/py.typed new file mode 100644 index 0000000000..e69de29bb2 diff --git a/libs/openchallenges/api-client-python/openchallenges_client/rest.py b/libs/openchallenges/api-client-python/openchallenges_client/rest.py new file mode 100644 index 0000000000..675b4e2715 --- /dev/null +++ b/libs/openchallenges/api-client-python/openchallenges_client/rest.py @@ -0,0 +1,303 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import io +import json +import logging +import re +import ssl + +from urllib.parse import urlencode, quote_plus +import urllib3 + +from openchallenges_client.exceptions import ApiException, UnauthorizedException, ForbiddenException, NotFoundException, ServiceException, ApiValueError, BadRequestException + + +logger = logging.getLogger(__name__) + + +class RESTResponse(io.IOBase): + + def __init__(self, resp): + self.urllib3_response = resp + self.status = resp.status + self.reason = resp.reason + self.data = resp.data + + def getheaders(self): + """Returns a dictionary of the response headers.""" + return self.urllib3_response.headers + + def getheader(self, name, default=None): + """Returns a given response header.""" + return self.urllib3_response.headers.get(name, default) + + +class RESTClientObject(object): + + def __init__(self, configuration, pools_size=4, maxsize=None): + # urllib3.PoolManager will pass all kw parameters to connectionpool + # https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/poolmanager.py#L75 # noqa: E501 + # https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/connectionpool.py#L680 # noqa: E501 + # maxsize is the number of requests to host that are allowed in parallel # noqa: E501 + # Custom SSL certificates and client certificates: http://urllib3.readthedocs.io/en/latest/advanced-usage.html # noqa: E501 + + # cert_reqs + if configuration.verify_ssl: + cert_reqs = ssl.CERT_REQUIRED + else: + cert_reqs = ssl.CERT_NONE + + addition_pool_args = {} + if configuration.assert_hostname is not None: + addition_pool_args['assert_hostname'] = configuration.assert_hostname # noqa: E501 + + if configuration.retries is not None: + addition_pool_args['retries'] = configuration.retries + + if configuration.tls_server_name: + addition_pool_args['server_hostname'] = configuration.tls_server_name + + + if configuration.socket_options is not None: + addition_pool_args['socket_options'] = configuration.socket_options + + if maxsize is None: + if configuration.connection_pool_maxsize is not None: + maxsize = configuration.connection_pool_maxsize + else: + maxsize = 4 + + # https pool manager + if configuration.proxy: + self.pool_manager = urllib3.ProxyManager( + num_pools=pools_size, + maxsize=maxsize, + cert_reqs=cert_reqs, + ca_certs=configuration.ssl_ca_cert, + cert_file=configuration.cert_file, + key_file=configuration.key_file, + proxy_url=configuration.proxy, + proxy_headers=configuration.proxy_headers, + **addition_pool_args + ) + else: + self.pool_manager = urllib3.PoolManager( + num_pools=pools_size, + maxsize=maxsize, + cert_reqs=cert_reqs, + ca_certs=configuration.ssl_ca_cert, + cert_file=configuration.cert_file, + key_file=configuration.key_file, + **addition_pool_args + ) + + def request(self, method, url, query_params=None, headers=None, + body=None, post_params=None, _preload_content=True, + _request_timeout=None): + """Perform requests. + + :param method: http request method + :param url: http request url + :param query_params: query parameters in the url + :param headers: http request headers + :param body: request json body, for `application/json` + :param post_params: request post parameters, + `application/x-www-form-urlencoded` + and `multipart/form-data` + :param _preload_content: if False, the urllib3.HTTPResponse object will + be returned without reading/decoding response + data. Default is True. + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + """ + method = method.upper() + assert method in ['GET', 'HEAD', 'DELETE', 'POST', 'PUT', + 'PATCH', 'OPTIONS'] + + if post_params and body: + raise ApiValueError( + "body parameter cannot be used with post_params parameter." + ) + + post_params = post_params or {} + headers = headers or {} + # url already contains the URL query string + # so reset query_params to empty dict + query_params = {} + + timeout = None + if _request_timeout: + if isinstance(_request_timeout, (int,float)): # noqa: E501,F821 + timeout = urllib3.Timeout(total=_request_timeout) + elif (isinstance(_request_timeout, tuple) and + len(_request_timeout) == 2): + timeout = urllib3.Timeout( + connect=_request_timeout[0], read=_request_timeout[1]) + + try: + # For `POST`, `PUT`, `PATCH`, `OPTIONS`, `DELETE` + if method in ['POST', 'PUT', 'PATCH', 'OPTIONS', 'DELETE']: + + # no content type provided or payload is json + if not headers.get('Content-Type') or re.search('json', headers['Content-Type'], re.IGNORECASE): + request_body = None + if body is not None: + request_body = json.dumps(body) + r = self.pool_manager.request( + method, url, + body=request_body, + preload_content=_preload_content, + timeout=timeout, + headers=headers) + elif headers['Content-Type'] == 'application/x-www-form-urlencoded': # noqa: E501 + r = self.pool_manager.request( + method, url, + fields=post_params, + encode_multipart=False, + preload_content=_preload_content, + timeout=timeout, + headers=headers) + elif headers['Content-Type'] == 'multipart/form-data': + # must del headers['Content-Type'], or the correct + # Content-Type which generated by urllib3 will be + # overwritten. + del headers['Content-Type'] + r = self.pool_manager.request( + method, url, + fields=post_params, + encode_multipart=True, + preload_content=_preload_content, + timeout=timeout, + headers=headers) + # Pass a `string` parameter directly in the body to support + # other content types than Json when `body` argument is + # provided in serialized form + elif isinstance(body, str) or isinstance(body, bytes): + request_body = body + r = self.pool_manager.request( + method, url, + body=request_body, + preload_content=_preload_content, + timeout=timeout, + headers=headers) + else: + # Cannot generate the request from given parameters + msg = """Cannot prepare a request message for provided + arguments. Please check that your arguments match + declared content type.""" + raise ApiException(status=0, reason=msg) + # For `GET`, `HEAD` + else: + r = self.pool_manager.request(method, url, + fields={}, + preload_content=_preload_content, + timeout=timeout, + headers=headers) + except urllib3.exceptions.SSLError as e: + msg = "{0}\n{1}".format(type(e).__name__, str(e)) + raise ApiException(status=0, reason=msg) + + if _preload_content: + r = RESTResponse(r) + + # log response body + logger.debug("response body: %s", r.data) + + if not 200 <= r.status <= 299: + if r.status == 400: + raise BadRequestException(http_resp=r) + + if r.status == 401: + raise UnauthorizedException(http_resp=r) + + if r.status == 403: + raise ForbiddenException(http_resp=r) + + if r.status == 404: + raise NotFoundException(http_resp=r) + + if 500 <= r.status <= 599: + raise ServiceException(http_resp=r) + + raise ApiException(http_resp=r) + + return r + + def get_request(self, url, headers=None, query_params=None, _preload_content=True, + _request_timeout=None): + return self.request("GET", url, + headers=headers, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + query_params=query_params) + + def head_request(self, url, headers=None, query_params=None, _preload_content=True, + _request_timeout=None): + return self.request("HEAD", url, + headers=headers, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + query_params=query_params) + + def options_request(self, url, headers=None, query_params=None, post_params=None, + body=None, _preload_content=True, _request_timeout=None): + return self.request("OPTIONS", url, + headers=headers, + query_params=query_params, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + + def delete_request(self, url, headers=None, query_params=None, body=None, + _preload_content=True, _request_timeout=None): + return self.request("DELETE", url, + headers=headers, + query_params=query_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + + def post_request(self, url, headers=None, query_params=None, post_params=None, + body=None, _preload_content=True, _request_timeout=None): + return self.request("POST", url, + headers=headers, + query_params=query_params, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + + def put_request(self, url, headers=None, query_params=None, post_params=None, + body=None, _preload_content=True, _request_timeout=None): + return self.request("PUT", url, + headers=headers, + query_params=query_params, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + + def patch_request(self, url, headers=None, query_params=None, post_params=None, + body=None, _preload_content=True, _request_timeout=None): + return self.request("PATCH", url, + headers=headers, + query_params=query_params, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) diff --git a/libs/openchallenges/api-client-python/poetry.lock b/libs/openchallenges/api-client-python/poetry.lock new file mode 100644 index 0000000000..83705ea644 --- /dev/null +++ b/libs/openchallenges/api-client-python/poetry.lock @@ -0,0 +1,408 @@ +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. + +[[package]] +name = "aenum" +version = "3.1.15" +description = "Advanced Enumerations (compatible with Python's stdlib Enum), NamedTuples, and NamedConstants" +optional = false +python-versions = "*" +files = [ + {file = "aenum-3.1.15-py2-none-any.whl", hash = "sha256:27b1710b9d084de6e2e695dab78fe9f269de924b51ae2850170ee7e1ca6288a5"}, + {file = "aenum-3.1.15-py3-none-any.whl", hash = "sha256:e0dfaeea4c2bd362144b87377e2c61d91958c5ed0b4daf89cb6f45ae23af6288"}, + {file = "aenum-3.1.15.tar.gz", hash = "sha256:8cbd76cd18c4f870ff39b24284d3ea028fbe8731a58df3aa581e434c575b9559"}, +] + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "distlib" +version = "0.3.7" +description = "Distribution utilities" +optional = false +python-versions = "*" +files = [ + {file = "distlib-0.3.7-py2.py3-none-any.whl", hash = "sha256:2e24928bc811348f0feb63014e97aaae3037f2cf48712d51ae61df7fd6075057"}, + {file = "distlib-0.3.7.tar.gz", hash = "sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8"}, +] + +[[package]] +name = "exceptiongroup" +version = "1.1.3" +description = "Backport of PEP 654 (exception groups)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.1.3-py3-none-any.whl", hash = "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"}, + {file = "exceptiongroup-1.1.3.tar.gz", hash = "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9"}, +] + +[package.extras] +test = ["pytest (>=6)"] + +[[package]] +name = "filelock" +version = "3.12.2" +description = "A platform independent file lock." +optional = false +python-versions = ">=3.7" +files = [ + {file = "filelock-3.12.2-py3-none-any.whl", hash = "sha256:cbb791cdea2a72f23da6ac5b5269ab0a0d161e9ef0100e653b69049a7706d1ec"}, + {file = "filelock-3.12.2.tar.gz", hash = "sha256:002740518d8aa59a26b0c76e10fb8c6e15eae825d34b6fdf670333fd7b938d81"}, +] + +[package.extras] +docs = ["furo (>=2023.5.20)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)", "pytest-timeout (>=2.1)"] + +[[package]] +name = "flake8" +version = "5.0.4" +description = "the modular source code checker: pep8 pyflakes and co" +optional = false +python-versions = ">=3.6.1" +files = [ + {file = "flake8-5.0.4-py2.py3-none-any.whl", hash = "sha256:7a1cf6b73744f5806ab95e526f6f0d8c01c66d7bbe349562d22dfca20610b248"}, + {file = "flake8-5.0.4.tar.gz", hash = "sha256:6fbe320aad8d6b95cec8b8e47bc933004678dc63095be98528b7bdd2a9f510db"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=1.1.0,<4.3", markers = "python_version < \"3.8\""} +mccabe = ">=0.7.0,<0.8.0" +pycodestyle = ">=2.9.0,<2.10.0" +pyflakes = ">=2.5.0,<2.6.0" + +[[package]] +name = "importlib-metadata" +version = "4.2.0" +description = "Read metadata from Python packages" +optional = false +python-versions = ">=3.6" +files = [ + {file = "importlib_metadata-4.2.0-py3-none-any.whl", hash = "sha256:057e92c15bc8d9e8109738a48db0ccb31b4d9d5cfbee5a8670879a30be66304b"}, + {file = "importlib_metadata-4.2.0.tar.gz", hash = "sha256:b7e52a1f8dec14a75ea73e0891f3060099ca1d8e6a462a4dff11c3e119ea1b31"}, +] + +[package.dependencies] +typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} +zipp = ">=0.5" + +[package.extras] +docs = ["jaraco.packaging (>=8.2)", "rst.linker (>=1.9)", "sphinx"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pep517", "pyfakefs", "pytest (>=4.6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-flake8", "pytest-mypy"] + +[[package]] +name = "iniconfig" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" +optional = false +python-versions = ">=3.7" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] + +[[package]] +name = "mccabe" +version = "0.7.0" +description = "McCabe checker, plugin for flake8" +optional = false +python-versions = ">=3.6" +files = [ + {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, + {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, +] + +[[package]] +name = "packaging" +version = "23.2" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.7" +files = [ + {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, + {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, +] + +[[package]] +name = "platformdirs" +version = "2.6.2" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +optional = false +python-versions = ">=3.7" +files = [ + {file = "platformdirs-2.6.2-py3-none-any.whl", hash = "sha256:83c8f6d04389165de7c9b6f0c682439697887bca0aa2f1c87ef1826be3584490"}, + {file = "platformdirs-2.6.2.tar.gz", hash = "sha256:e1fea1fe471b9ff8332e229df3cb7de4f53eeea4998d3b6bfff542115e998bd2"}, +] + +[package.dependencies] +typing-extensions = {version = ">=4.4", markers = "python_version < \"3.8\""} + +[package.extras] +docs = ["furo (>=2022.12.7)", "proselint (>=0.13)", "sphinx (>=5.3)", "sphinx-autodoc-typehints (>=1.19.5)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.2.2)", "pytest (>=7.2)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] + +[[package]] +name = "pluggy" +version = "1.2.0" +description = "plugin and hook calling mechanisms for python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"}, + {file = "pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "py" +version = "1.11.0" +description = "library with cross-python path, ini-parsing, io, code, log facilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, + {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, +] + +[[package]] +name = "pycodestyle" +version = "2.9.1" +description = "Python style guide checker" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pycodestyle-2.9.1-py2.py3-none-any.whl", hash = "sha256:d1735fc58b418fd7c5f658d28d943854f8a849b01a5d0a1e6f3f3fdd0166804b"}, + {file = "pycodestyle-2.9.1.tar.gz", hash = "sha256:2c9607871d58c76354b697b42f5d57e1ada7d261c261efac224b664affdc5785"}, +] + +[[package]] +name = "pydantic" +version = "1.10.13" +description = "Data validation and settings management using python type hints" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pydantic-1.10.13-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:efff03cc7a4f29d9009d1c96ceb1e7a70a65cfe86e89d34e4a5f2ab1e5693737"}, + {file = "pydantic-1.10.13-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3ecea2b9d80e5333303eeb77e180b90e95eea8f765d08c3d278cd56b00345d01"}, + {file = "pydantic-1.10.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1740068fd8e2ef6eb27a20e5651df000978edce6da6803c2bef0bc74540f9548"}, + {file = "pydantic-1.10.13-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84bafe2e60b5e78bc64a2941b4c071a4b7404c5c907f5f5a99b0139781e69ed8"}, + {file = "pydantic-1.10.13-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bc0898c12f8e9c97f6cd44c0ed70d55749eaf783716896960b4ecce2edfd2d69"}, + {file = "pydantic-1.10.13-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:654db58ae399fe6434e55325a2c3e959836bd17a6f6a0b6ca8107ea0571d2e17"}, + {file = "pydantic-1.10.13-cp310-cp310-win_amd64.whl", hash = "sha256:75ac15385a3534d887a99c713aa3da88a30fbd6204a5cd0dc4dab3d770b9bd2f"}, + {file = "pydantic-1.10.13-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c553f6a156deb868ba38a23cf0df886c63492e9257f60a79c0fd8e7173537653"}, + {file = "pydantic-1.10.13-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5e08865bc6464df8c7d61439ef4439829e3ab62ab1669cddea8dd00cd74b9ffe"}, + {file = "pydantic-1.10.13-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e31647d85a2013d926ce60b84f9dd5300d44535a9941fe825dc349ae1f760df9"}, + {file = "pydantic-1.10.13-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:210ce042e8f6f7c01168b2d84d4c9eb2b009fe7bf572c2266e235edf14bacd80"}, + {file = "pydantic-1.10.13-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:8ae5dd6b721459bfa30805f4c25880e0dd78fc5b5879f9f7a692196ddcb5a580"}, + {file = "pydantic-1.10.13-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f8e81fc5fb17dae698f52bdd1c4f18b6ca674d7068242b2aff075f588301bbb0"}, + {file = "pydantic-1.10.13-cp311-cp311-win_amd64.whl", hash = "sha256:61d9dce220447fb74f45e73d7ff3b530e25db30192ad8d425166d43c5deb6df0"}, + {file = "pydantic-1.10.13-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4b03e42ec20286f052490423682016fd80fda830d8e4119f8ab13ec7464c0132"}, + {file = "pydantic-1.10.13-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f59ef915cac80275245824e9d771ee939133be38215555e9dc90c6cb148aaeb5"}, + {file = "pydantic-1.10.13-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5a1f9f747851338933942db7af7b6ee8268568ef2ed86c4185c6ef4402e80ba8"}, + {file = "pydantic-1.10.13-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:97cce3ae7341f7620a0ba5ef6cf043975cd9d2b81f3aa5f4ea37928269bc1b87"}, + {file = "pydantic-1.10.13-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:854223752ba81e3abf663d685f105c64150873cc6f5d0c01d3e3220bcff7d36f"}, + {file = "pydantic-1.10.13-cp37-cp37m-win_amd64.whl", hash = "sha256:b97c1fac8c49be29486df85968682b0afa77e1b809aff74b83081cc115e52f33"}, + {file = "pydantic-1.10.13-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c958d053453a1c4b1c2062b05cd42d9d5c8eb67537b8d5a7e3c3032943ecd261"}, + {file = "pydantic-1.10.13-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4c5370a7edaac06daee3af1c8b1192e305bc102abcbf2a92374b5bc793818599"}, + {file = "pydantic-1.10.13-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d6f6e7305244bddb4414ba7094ce910560c907bdfa3501e9db1a7fd7eaea127"}, + {file = "pydantic-1.10.13-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d3a3c792a58e1622667a2837512099eac62490cdfd63bd407993aaf200a4cf1f"}, + {file = "pydantic-1.10.13-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c636925f38b8db208e09d344c7aa4f29a86bb9947495dd6b6d376ad10334fb78"}, + {file = "pydantic-1.10.13-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:678bcf5591b63cc917100dc50ab6caebe597ac67e8c9ccb75e698f66038ea953"}, + {file = "pydantic-1.10.13-cp38-cp38-win_amd64.whl", hash = "sha256:6cf25c1a65c27923a17b3da28a0bdb99f62ee04230c931d83e888012851f4e7f"}, + {file = "pydantic-1.10.13-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8ef467901d7a41fa0ca6db9ae3ec0021e3f657ce2c208e98cd511f3161c762c6"}, + {file = "pydantic-1.10.13-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:968ac42970f57b8344ee08837b62f6ee6f53c33f603547a55571c954a4225691"}, + {file = "pydantic-1.10.13-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9849f031cf8a2f0a928fe885e5a04b08006d6d41876b8bbd2fc68a18f9f2e3fd"}, + {file = "pydantic-1.10.13-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:56e3ff861c3b9c6857579de282ce8baabf443f42ffba355bf070770ed63e11e1"}, + {file = "pydantic-1.10.13-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f00790179497767aae6bcdc36355792c79e7bbb20b145ff449700eb076c5f96"}, + {file = "pydantic-1.10.13-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:75b297827b59bc229cac1a23a2f7a4ac0031068e5be0ce385be1462e7e17a35d"}, + {file = "pydantic-1.10.13-cp39-cp39-win_amd64.whl", hash = "sha256:e70ca129d2053fb8b728ee7d1af8e553a928d7e301a311094b8a0501adc8763d"}, + {file = "pydantic-1.10.13-py3-none-any.whl", hash = "sha256:b87326822e71bd5f313e7d3bfdc77ac3247035ac10b0c0618bd99dcf95b1e687"}, + {file = "pydantic-1.10.13.tar.gz", hash = "sha256:32c8b48dcd3b2ac4e78b0ba4af3a2c2eb6048cb75202f0ea7b34feb740efc340"}, +] + +[package.dependencies] +typing-extensions = ">=4.2.0" + +[package.extras] +dotenv = ["python-dotenv (>=0.10.4)"] +email = ["email-validator (>=1.0.3)"] + +[[package]] +name = "pyflakes" +version = "2.5.0" +description = "passive checker of Python programs" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pyflakes-2.5.0-py2.py3-none-any.whl", hash = "sha256:4579f67d887f804e67edb544428f264b7b24f435b263c4614f384135cea553d2"}, + {file = "pyflakes-2.5.0.tar.gz", hash = "sha256:491feb020dca48ccc562a8c0cbe8df07ee13078df59813b83959cbdada312ea3"}, +] + +[[package]] +name = "pytest" +version = "7.4.2" +description = "pytest: simple powerful testing with Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest-7.4.2-py3-none-any.whl", hash = "sha256:1d881c6124e08ff0a1bb75ba3ec0bfd8b5354a01c194ddd5a0a870a48d99b002"}, + {file = "pytest-7.4.2.tar.gz", hash = "sha256:a766259cfab564a2ad52cb1aae1b881a75c3eb7e34ca3779697c23ed47c47069"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} +importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=0.12,<2.0" +tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} + +[package.extras] +testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] + +[[package]] +name = "python-dateutil" +version = "2.8.2" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +files = [ + {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, + {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, +] + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] + +[[package]] +name = "tox" +version = "3.28.0" +description = "tox is a generic virtualenv management and test command line tool" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +files = [ + {file = "tox-3.28.0-py2.py3-none-any.whl", hash = "sha256:57b5ab7e8bb3074edc3c0c0b4b192a4f3799d3723b2c5b76f1fa9f2d40316eea"}, + {file = "tox-3.28.0.tar.gz", hash = "sha256:d0d28f3fe6d6d7195c27f8b054c3e99d5451952b54abdae673b71609a581f640"}, +] + +[package.dependencies] +colorama = {version = ">=0.4.1", markers = "platform_system == \"Windows\""} +filelock = ">=3.0.0" +importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} +packaging = ">=14" +pluggy = ">=0.12.0" +py = ">=1.4.17" +six = ">=1.14.0" +tomli = {version = ">=2.0.1", markers = "python_version >= \"3.7\" and python_version < \"3.11\""} +virtualenv = ">=16.0.0,<20.0.0 || >20.0.0,<20.0.1 || >20.0.1,<20.0.2 || >20.0.2,<20.0.3 || >20.0.3,<20.0.4 || >20.0.4,<20.0.5 || >20.0.5,<20.0.6 || >20.0.6,<20.0.7 || >20.0.7" + +[package.extras] +docs = ["pygments-github-lexers (>=0.0.5)", "sphinx (>=2.0.0)", "sphinxcontrib-autoprogram (>=0.1.5)", "towncrier (>=18.5.0)"] +testing = ["flaky (>=3.4.0)", "freezegun (>=0.3.11)", "pathlib2 (>=2.3.3)", "psutil (>=5.6.1)", "pytest (>=4.0.0)", "pytest-cov (>=2.5.1)", "pytest-mock (>=1.10.0)", "pytest-randomly (>=1.0.0)"] + +[[package]] +name = "typing-extensions" +version = "4.7.1" +description = "Backported and Experimental Type Hints for Python 3.7+" +optional = false +python-versions = ">=3.7" +files = [ + {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, + {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, +] + +[[package]] +name = "urllib3" +version = "2.0.7" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=3.7" +files = [ + {file = "urllib3-2.0.7-py3-none-any.whl", hash = "sha256:fdb6d215c776278489906c2f8916e6e7d4f5a9b602ccbcfdf7f016fc8da0596e"}, + {file = "urllib3-2.0.7.tar.gz", hash = "sha256:c97dfde1f7bd43a71c8d2a58e369e9b2bf692d1334ea9f9cae55add7d0dd0f84"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + +[[package]] +name = "virtualenv" +version = "20.16.2" +description = "Virtual Python Environment builder" +optional = false +python-versions = ">=3.6" +files = [ + {file = "virtualenv-20.16.2-py2.py3-none-any.whl", hash = "sha256:635b272a8e2f77cb051946f46c60a54ace3cb5e25568228bd6b57fc70eca9ff3"}, + {file = "virtualenv-20.16.2.tar.gz", hash = "sha256:0ef5be6d07181946891f5abc8047fda8bc2f0b4b9bf222c64e6e8963baee76db"}, +] + +[package.dependencies] +distlib = ">=0.3.1,<1" +filelock = ">=3.2,<4" +importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} +platformdirs = ">=2,<3" + +[package.extras] +docs = ["proselint (>=0.10.2)", "sphinx (>=3)", "sphinx-argparse (>=0.2.5)", "sphinx-rtd-theme (>=0.4.3)", "towncrier (>=21.3)"] +testing = ["coverage (>=4)", "coverage-enable-subprocess (>=1)", "flaky (>=3)", "packaging (>=20.0)", "pytest (>=4)", "pytest-env (>=0.6.2)", "pytest-freezegun (>=0.4.1)", "pytest-mock (>=2)", "pytest-randomly (>=1)", "pytest-timeout (>=1)"] + +[[package]] +name = "zipp" +version = "3.15.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +optional = false +python-versions = ">=3.7" +files = [ + {file = "zipp-3.15.0-py3-none-any.whl", hash = "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556"}, + {file = "zipp-3.15.0.tar.gz", hash = "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] + +[metadata] +lock-version = "2.0" +python-versions = "^3.7" +content-hash = "49bfc19f1676bdfd1e1abad71039f6f9b354d3a84fdeed7d273f5bfba014f3e2" diff --git a/libs/openchallenges/api-client-python/prepare-python.sh b/libs/openchallenges/api-client-python/prepare-python.sh new file mode 100755 index 0000000000..81c14b121f --- /dev/null +++ b/libs/openchallenges/api-client-python/prepare-python.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +pyenv install --skip-existing 3.9.2 +pyenv local 3.9.2 +poetry env use 3.9.2 +poetry install \ No newline at end of file diff --git a/libs/openchallenges/api-client-python/project.json b/libs/openchallenges/api-client-python/project.json new file mode 100644 index 0000000000..852abf9106 --- /dev/null +++ b/libs/openchallenges/api-client-python/project.json @@ -0,0 +1,31 @@ +{ + "name": "openchallenges-api-client-python", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "libs/openchallenges/api-client-python/src", + "projectType": "library", + "prefix": "openchallenges", + "targets": { + "prepare": { + "executor": "nx:run-commands", + "options": { + "command": "./prepare-python.sh", + "cwd": "{projectRoot}" + } + }, + "generate": { + "executor": "nx:run-commands", + "options": { + "commands": [ + "rm -fr src/*", + "openapi-generator-cli generate", + "echo 'TODO Format generated code'" + ], + "cwd": "{projectRoot}", + "parallel": false + }, + "dependsOn": ["^build"] + } + }, + "tags": ["language:python", "package-manager:poetry"], + "implicitDependencies": ["openchallenges-api-description"] +} diff --git a/libs/openchallenges/api-client-python/pyproject.toml b/libs/openchallenges/api-client-python/pyproject.toml new file mode 100644 index 0000000000..238a9d8a3b --- /dev/null +++ b/libs/openchallenges/api-client-python/pyproject.toml @@ -0,0 +1,30 @@ +[tool.poetry] +name = "openchallenges-client" +version = "1.0.0" +description = "OpenChallenges REST API" +authors = ["Support "] +license = "Apache 2.0" +readme = "README.md" +repository = "https://github.com/GIT_USER_ID/GIT_REPO_ID" +keywords = ["OpenAPI", "OpenAPI-Generator", "OpenChallenges REST API"] +include = ["openchallenges_client/py.typed"] + +[tool.poetry.dependencies] +python = "^3.7" + +urllib3 = ">= 1.25.3" +python-dateutil = ">=2.8.2" +pydantic = "^1.10.5, <2" +aenum = ">=3.1.11" + +[tool.poetry.dev-dependencies] +pytest = ">=7.2.1" +tox = ">=3.9.0" +flake8 = ">=4.0.0" + +[build-system] +requires = ["setuptools"] +build-backend = "setuptools.build_meta" + +[tool.pylint.'MESSAGES CONTROL'] +extension-pkg-whitelist = "pydantic" diff --git a/libs/openchallenges/api-client-python/requirements.txt b/libs/openchallenges/api-client-python/requirements.txt new file mode 100644 index 0000000000..258c179c10 --- /dev/null +++ b/libs/openchallenges/api-client-python/requirements.txt @@ -0,0 +1,5 @@ +python_dateutil >= 2.5.3 +setuptools >= 21.0.0 +urllib3 >= 1.25.3, < 2.1.0 +pydantic >= 1.10.5, < 2 +aenum >= 3.1.11 diff --git a/libs/openchallenges/api-client-python/setup.py b/libs/openchallenges/api-client-python/setup.py new file mode 100644 index 0000000000..2834b3abc5 --- /dev/null +++ b/libs/openchallenges/api-client-python/setup.py @@ -0,0 +1,50 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from setuptools import setup, find_packages # noqa: H301 + +# To install the library, run the following +# +# python setup.py install +# +# prerequisite: setuptools +# http://pypi.python.org/pypi/setuptools +NAME = "openchallenges-client" +VERSION = "1.0.0" +PYTHON_REQUIRES = ">=3.7" +REQUIRES = [ + "urllib3 >= 1.25.3, < 2.1.0", + "python-dateutil", + "pydantic >= 1.10.5, < 2", + "aenum" +] + +setup( + name=NAME, + version=VERSION, + description="OpenChallenges REST API", + author="Support", + author_email="team@openapitools.org", + url="", + keywords=["OpenAPI", "OpenAPI-Generator", "OpenChallenges REST API"], + install_requires=REQUIRES, + packages=find_packages(exclude=["test", "tests"]), + include_package_data=True, + license="Apache 2.0", + long_description_content_type='text/markdown', + long_description="""\ + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + """, # noqa: E501 + package_data={"openchallenges_client": ["py.typed"]}, +) diff --git a/libs/openchallenges/api-client-python/test-requirements.txt b/libs/openchallenges/api-client-python/test-requirements.txt new file mode 100644 index 0000000000..3a0d0b939a --- /dev/null +++ b/libs/openchallenges/api-client-python/test-requirements.txt @@ -0,0 +1,3 @@ +pytest~=7.1.3 +pytest-cov>=2.8.1 +pytest-randomly>=3.12.0 diff --git a/libs/openchallenges/api-client-python/test/__init__.py b/libs/openchallenges/api-client-python/test/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/libs/openchallenges/api-client-python/test/test_basic_error.py b/libs/openchallenges/api-client-python/test/test_basic_error.py new file mode 100644 index 0000000000..a6ab749772 --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_basic_error.py @@ -0,0 +1,59 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +import openchallenges_client +from openchallenges_client.models.basic_error import BasicError # noqa: E501 +from openchallenges_client.rest import ApiException + +class TestBasicError(unittest.TestCase): + """BasicError unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional): + """Test BasicError + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `BasicError` + """ + model = openchallenges_client.models.basic_error.BasicError() # noqa: E501 + if include_optional : + return BasicError( + title = '', + status = 56, + detail = '', + type = '' + ) + else : + return BasicError( + title = '', + status = 56, + ) + """ + + def testBasicError(self): + """Test BasicError""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_challenge.py b/libs/openchallenges/api-client-python/test/test_challenge.py new file mode 100644 index 0000000000..eaa9edabfe --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_challenge.py @@ -0,0 +1,103 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +import openchallenges_client +from openchallenges_client.models.challenge import Challenge # noqa: E501 +from openchallenges_client.rest import ApiException + +class TestChallenge(unittest.TestCase): + """Challenge unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional): + """Test Challenge + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `Challenge` + """ + model = openchallenges_client.models.challenge.Challenge() # noqa: E501 + if include_optional : + return Challenge( + id = 1, + slug = 'awesome-challenge', + name = '012', + headline = 'Example challenge headline', + description = 'This is an example description of the challenge.', + doi = '', + status = 'active', + difficulty = 'intermediate', + platform = openchallenges_client.models.simple_challenge_platform.SimpleChallengePlatform( + id = 1, + slug = 'example-challenge-platform', + name = '012', ), + website_url = '', + avatar_url = '', + incentives = [ + 'publication' + ], + submission_types = [ + 'container_image' + ], + input_data_types = [ + openchallenges_client.models.simple_challenge_input_data_type.SimpleChallengeInputDataType( + id = 1, + slug = 'gene-expression', + name = 'gene expression', ) + ], + start_date = 'Fri Jul 21 00:00:00 UTC 2017', + end_date = 'Fri Jul 21 00:00:00 UTC 2017', + starred_count = 56, + created_at = '2022-07-04T22:19:11Z', + updated_at = '2022-07-04T22:19:11Z' + ) + else : + return Challenge( + id = 1, + slug = 'awesome-challenge', + name = '012', + description = 'This is an example description of the challenge.', + status = 'active', + difficulty = 'intermediate', + platform = openchallenges_client.models.simple_challenge_platform.SimpleChallengePlatform( + id = 1, + slug = 'example-challenge-platform', + name = '012', ), + incentives = [ + 'publication' + ], + submission_types = [ + 'container_image' + ], + starred_count = 56, + created_at = '2022-07-04T22:19:11Z', + updated_at = '2022-07-04T22:19:11Z', + ) + """ + + def testChallenge(self): + """Test Challenge""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_challenge_analytics_api.py b/libs/openchallenges/api-client-python/test/test_challenge_analytics_api.py new file mode 100644 index 0000000000..ec38a98509 --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_challenge_analytics_api.py @@ -0,0 +1,40 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +import openchallenges_client +from openchallenges_client.api.challenge_analytics_api import ChallengeAnalyticsApi # noqa: E501 +from openchallenges_client.rest import ApiException + + +class TestChallengeAnalyticsApi(unittest.TestCase): + """ChallengeAnalyticsApi unit test stubs""" + + def setUp(self): + self.api = openchallenges_client.api.challenge_analytics_api.ChallengeAnalyticsApi() # noqa: E501 + + def tearDown(self): + pass + + def test_get_challenges_per_year(self): + """Test case for get_challenges_per_year + + Get the number of challenges tracked per year # noqa: E501 + """ + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_challenge_api.py b/libs/openchallenges/api-client-python/test/test_challenge_api.py new file mode 100644 index 0000000000..182f08da5c --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_challenge_api.py @@ -0,0 +1,47 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +import openchallenges_client +from openchallenges_client.api.challenge_api import ChallengeApi # noqa: E501 +from openchallenges_client.rest import ApiException + + +class TestChallengeApi(unittest.TestCase): + """ChallengeApi unit test stubs""" + + def setUp(self): + self.api = openchallenges_client.api.challenge_api.ChallengeApi() # noqa: E501 + + def tearDown(self): + pass + + def test_get_challenge(self): + """Test case for get_challenge + + Get a challenge # noqa: E501 + """ + pass + + def test_list_challenges(self): + """Test case for list_challenges + + List challenges # noqa: E501 + """ + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_challenge_category.py b/libs/openchallenges/api-client-python/test/test_challenge_category.py new file mode 100644 index 0000000000..6b81141639 --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_challenge_category.py @@ -0,0 +1,36 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +import openchallenges_client +from openchallenges_client.models.challenge_category import ChallengeCategory # noqa: E501 +from openchallenges_client.rest import ApiException + +class TestChallengeCategory(unittest.TestCase): + """ChallengeCategory unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testChallengeCategory(self): + """Test ChallengeCategory""" + # inst = ChallengeCategory() + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_challenge_contribution.py b/libs/openchallenges/api-client-python/test/test_challenge_contribution.py new file mode 100644 index 0000000000..cdcf164a86 --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_challenge_contribution.py @@ -0,0 +1,59 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +import openchallenges_client +from openchallenges_client.models.challenge_contribution import ChallengeContribution # noqa: E501 +from openchallenges_client.rest import ApiException + +class TestChallengeContribution(unittest.TestCase): + """ChallengeContribution unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional): + """Test ChallengeContribution + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `ChallengeContribution` + """ + model = openchallenges_client.models.challenge_contribution.ChallengeContribution() # noqa: E501 + if include_optional : + return ChallengeContribution( + challenge_id = 1, + organization_id = 1, + role = 'challenge_organizer' + ) + else : + return ChallengeContribution( + challenge_id = 1, + organization_id = 1, + role = 'challenge_organizer', + ) + """ + + def testChallengeContribution(self): + """Test ChallengeContribution""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_challenge_contribution_api.py b/libs/openchallenges/api-client-python/test/test_challenge_contribution_api.py new file mode 100644 index 0000000000..eaed96bf13 --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_challenge_contribution_api.py @@ -0,0 +1,40 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +import openchallenges_client +from openchallenges_client.api.challenge_contribution_api import ChallengeContributionApi # noqa: E501 +from openchallenges_client.rest import ApiException + + +class TestChallengeContributionApi(unittest.TestCase): + """ChallengeContributionApi unit test stubs""" + + def setUp(self): + self.api = openchallenges_client.api.challenge_contribution_api.ChallengeContributionApi() # noqa: E501 + + def tearDown(self): + pass + + def test_list_challenge_contributions(self): + """Test case for list_challenge_contributions + + List challenge contributions # noqa: E501 + """ + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_challenge_contribution_role.py b/libs/openchallenges/api-client-python/test/test_challenge_contribution_role.py new file mode 100644 index 0000000000..6b3716b65e --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_challenge_contribution_role.py @@ -0,0 +1,36 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +import openchallenges_client +from openchallenges_client.models.challenge_contribution_role import ChallengeContributionRole # noqa: E501 +from openchallenges_client.rest import ApiException + +class TestChallengeContributionRole(unittest.TestCase): + """ChallengeContributionRole unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testChallengeContributionRole(self): + """Test ChallengeContributionRole""" + # inst = ChallengeContributionRole() + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_challenge_contributions_page.py b/libs/openchallenges/api-client-python/test/test_challenge_contributions_page.py new file mode 100644 index 0000000000..2242c63443 --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_challenge_contributions_page.py @@ -0,0 +1,77 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +import openchallenges_client +from openchallenges_client.models.challenge_contributions_page import ChallengeContributionsPage # noqa: E501 +from openchallenges_client.rest import ApiException + +class TestChallengeContributionsPage(unittest.TestCase): + """ChallengeContributionsPage unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional): + """Test ChallengeContributionsPage + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `ChallengeContributionsPage` + """ + model = openchallenges_client.models.challenge_contributions_page.ChallengeContributionsPage() # noqa: E501 + if include_optional : + return ChallengeContributionsPage( + number = 99, + size = 99, + total_elements = 99, + total_pages = 99, + has_next = True, + has_previous = True, + challenge_contributions = [ + openchallenges_client.models.challenge_contribution.ChallengeContribution( + challenge_id = 1, + organization_id = 1, + role = 'challenge_organizer', ) + ] + ) + else : + return ChallengeContributionsPage( + number = 99, + size = 99, + total_elements = 99, + total_pages = 99, + has_next = True, + has_previous = True, + challenge_contributions = [ + openchallenges_client.models.challenge_contribution.ChallengeContribution( + challenge_id = 1, + organization_id = 1, + role = 'challenge_organizer', ) + ], + ) + """ + + def testChallengeContributionsPage(self): + """Test ChallengeContributionsPage""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_challenge_difficulty.py b/libs/openchallenges/api-client-python/test/test_challenge_difficulty.py new file mode 100644 index 0000000000..b52f17d539 --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_challenge_difficulty.py @@ -0,0 +1,36 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +import openchallenges_client +from openchallenges_client.models.challenge_difficulty import ChallengeDifficulty # noqa: E501 +from openchallenges_client.rest import ApiException + +class TestChallengeDifficulty(unittest.TestCase): + """ChallengeDifficulty unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testChallengeDifficulty(self): + """Test ChallengeDifficulty""" + # inst = ChallengeDifficulty() + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_challenge_direction.py b/libs/openchallenges/api-client-python/test/test_challenge_direction.py new file mode 100644 index 0000000000..7a525c3b6e --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_challenge_direction.py @@ -0,0 +1,36 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +import openchallenges_client +from openchallenges_client.models.challenge_direction import ChallengeDirection # noqa: E501 +from openchallenges_client.rest import ApiException + +class TestChallengeDirection(unittest.TestCase): + """ChallengeDirection unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testChallengeDirection(self): + """Test ChallengeDirection""" + # inst = ChallengeDirection() + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_challenge_incentive.py b/libs/openchallenges/api-client-python/test/test_challenge_incentive.py new file mode 100644 index 0000000000..126b369ba3 --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_challenge_incentive.py @@ -0,0 +1,36 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +import openchallenges_client +from openchallenges_client.models.challenge_incentive import ChallengeIncentive # noqa: E501 +from openchallenges_client.rest import ApiException + +class TestChallengeIncentive(unittest.TestCase): + """ChallengeIncentive unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testChallengeIncentive(self): + """Test ChallengeIncentive""" + # inst = ChallengeIncentive() + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_challenge_input_data_type.py b/libs/openchallenges/api-client-python/test/test_challenge_input_data_type.py new file mode 100644 index 0000000000..e20c569b1d --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_challenge_input_data_type.py @@ -0,0 +1,63 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +import openchallenges_client +from openchallenges_client.models.challenge_input_data_type import ChallengeInputDataType # noqa: E501 +from openchallenges_client.rest import ApiException + +class TestChallengeInputDataType(unittest.TestCase): + """ChallengeInputDataType unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional): + """Test ChallengeInputDataType + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `ChallengeInputDataType` + """ + model = openchallenges_client.models.challenge_input_data_type.ChallengeInputDataType() # noqa: E501 + if include_optional : + return ChallengeInputDataType( + id = 1, + slug = 'gene-expression', + name = 'gene expression', + created_at = '2022-07-04T22:19:11Z', + updated_at = '2022-07-04T22:19:11Z' + ) + else : + return ChallengeInputDataType( + id = 1, + slug = 'gene-expression', + name = 'gene expression', + created_at = '2022-07-04T22:19:11Z', + updated_at = '2022-07-04T22:19:11Z', + ) + """ + + def testChallengeInputDataType(self): + """Test ChallengeInputDataType""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_challenge_input_data_type_api.py b/libs/openchallenges/api-client-python/test/test_challenge_input_data_type_api.py new file mode 100644 index 0000000000..c6ca734883 --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_challenge_input_data_type_api.py @@ -0,0 +1,40 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +import openchallenges_client +from openchallenges_client.api.challenge_input_data_type_api import ChallengeInputDataTypeApi # noqa: E501 +from openchallenges_client.rest import ApiException + + +class TestChallengeInputDataTypeApi(unittest.TestCase): + """ChallengeInputDataTypeApi unit test stubs""" + + def setUp(self): + self.api = openchallenges_client.api.challenge_input_data_type_api.ChallengeInputDataTypeApi() # noqa: E501 + + def tearDown(self): + pass + + def test_list_challenge_input_data_types(self): + """Test case for list_challenge_input_data_types + + List challenge input data types # noqa: E501 + """ + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_challenge_input_data_type_direction.py b/libs/openchallenges/api-client-python/test/test_challenge_input_data_type_direction.py new file mode 100644 index 0000000000..6377db818a --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_challenge_input_data_type_direction.py @@ -0,0 +1,36 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +import openchallenges_client +from openchallenges_client.models.challenge_input_data_type_direction import ChallengeInputDataTypeDirection # noqa: E501 +from openchallenges_client.rest import ApiException + +class TestChallengeInputDataTypeDirection(unittest.TestCase): + """ChallengeInputDataTypeDirection unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testChallengeInputDataTypeDirection(self): + """Test ChallengeInputDataTypeDirection""" + # inst = ChallengeInputDataTypeDirection() + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_challenge_input_data_type_search_query.py b/libs/openchallenges/api-client-python/test/test_challenge_input_data_type_search_query.py new file mode 100644 index 0000000000..823458b428 --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_challenge_input_data_type_search_query.py @@ -0,0 +1,58 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +import openchallenges_client +from openchallenges_client.models.challenge_input_data_type_search_query import ChallengeInputDataTypeSearchQuery # noqa: E501 +from openchallenges_client.rest import ApiException + +class TestChallengeInputDataTypeSearchQuery(unittest.TestCase): + """ChallengeInputDataTypeSearchQuery unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional): + """Test ChallengeInputDataTypeSearchQuery + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `ChallengeInputDataTypeSearchQuery` + """ + model = openchallenges_client.models.challenge_input_data_type_search_query.ChallengeInputDataTypeSearchQuery() # noqa: E501 + if include_optional : + return ChallengeInputDataTypeSearchQuery( + page_number = 0, + page_size = 1, + sort = 'relevance', + direction = 'asc', + search_terms = 'genomic' + ) + else : + return ChallengeInputDataTypeSearchQuery( + ) + """ + + def testChallengeInputDataTypeSearchQuery(self): + """Test ChallengeInputDataTypeSearchQuery""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_challenge_input_data_type_sort.py b/libs/openchallenges/api-client-python/test/test_challenge_input_data_type_sort.py new file mode 100644 index 0000000000..527dd0bbad --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_challenge_input_data_type_sort.py @@ -0,0 +1,36 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +import openchallenges_client +from openchallenges_client.models.challenge_input_data_type_sort import ChallengeInputDataTypeSort # noqa: E501 +from openchallenges_client.rest import ApiException + +class TestChallengeInputDataTypeSort(unittest.TestCase): + """ChallengeInputDataTypeSort unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testChallengeInputDataTypeSort(self): + """Test ChallengeInputDataTypeSort""" + # inst = ChallengeInputDataTypeSort() + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_challenge_input_data_types_page.py b/libs/openchallenges/api-client-python/test/test_challenge_input_data_types_page.py new file mode 100644 index 0000000000..ebc5aac3d2 --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_challenge_input_data_types_page.py @@ -0,0 +1,81 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +import openchallenges_client +from openchallenges_client.models.challenge_input_data_types_page import ChallengeInputDataTypesPage # noqa: E501 +from openchallenges_client.rest import ApiException + +class TestChallengeInputDataTypesPage(unittest.TestCase): + """ChallengeInputDataTypesPage unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional): + """Test ChallengeInputDataTypesPage + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `ChallengeInputDataTypesPage` + """ + model = openchallenges_client.models.challenge_input_data_types_page.ChallengeInputDataTypesPage() # noqa: E501 + if include_optional : + return ChallengeInputDataTypesPage( + number = 99, + size = 99, + total_elements = 99, + total_pages = 99, + has_next = True, + has_previous = True, + challenge_input_data_types = [ + openchallenges_client.models.challenge_input_data_type.ChallengeInputDataType( + id = 1, + slug = 'gene-expression', + name = 'gene expression', + created_at = '2022-07-04T22:19:11Z', + updated_at = '2022-07-04T22:19:11Z', ) + ] + ) + else : + return ChallengeInputDataTypesPage( + number = 99, + size = 99, + total_elements = 99, + total_pages = 99, + has_next = True, + has_previous = True, + challenge_input_data_types = [ + openchallenges_client.models.challenge_input_data_type.ChallengeInputDataType( + id = 1, + slug = 'gene-expression', + name = 'gene expression', + created_at = '2022-07-04T22:19:11Z', + updated_at = '2022-07-04T22:19:11Z', ) + ], + ) + """ + + def testChallengeInputDataTypesPage(self): + """Test ChallengeInputDataTypesPage""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_challenge_platform.py b/libs/openchallenges/api-client-python/test/test_challenge_platform.py new file mode 100644 index 0000000000..3147a7f710 --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_challenge_platform.py @@ -0,0 +1,67 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +import openchallenges_client +from openchallenges_client.models.challenge_platform import ChallengePlatform # noqa: E501 +from openchallenges_client.rest import ApiException + +class TestChallengePlatform(unittest.TestCase): + """ChallengePlatform unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional): + """Test ChallengePlatform + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `ChallengePlatform` + """ + model = openchallenges_client.models.challenge_platform.ChallengePlatform() # noqa: E501 + if include_optional : + return ChallengePlatform( + id = 1, + slug = 'example-challenge-platform', + name = '012', + avatar_url = 'https://via.placeholder.com/300.png', + website_url = 'https://example.com', + created_at = '2022-07-04T22:19:11Z', + updated_at = '2022-07-04T22:19:11Z' + ) + else : + return ChallengePlatform( + id = 1, + slug = 'example-challenge-platform', + name = '012', + avatar_url = 'https://via.placeholder.com/300.png', + website_url = 'https://example.com', + created_at = '2022-07-04T22:19:11Z', + updated_at = '2022-07-04T22:19:11Z', + ) + """ + + def testChallengePlatform(self): + """Test ChallengePlatform""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_challenge_platform_api.py b/libs/openchallenges/api-client-python/test/test_challenge_platform_api.py new file mode 100644 index 0000000000..8b655a5d63 --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_challenge_platform_api.py @@ -0,0 +1,47 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +import openchallenges_client +from openchallenges_client.api.challenge_platform_api import ChallengePlatformApi # noqa: E501 +from openchallenges_client.rest import ApiException + + +class TestChallengePlatformApi(unittest.TestCase): + """ChallengePlatformApi unit test stubs""" + + def setUp(self): + self.api = openchallenges_client.api.challenge_platform_api.ChallengePlatformApi() # noqa: E501 + + def tearDown(self): + pass + + def test_get_challenge_platform(self): + """Test case for get_challenge_platform + + Get a challenge platform # noqa: E501 + """ + pass + + def test_list_challenge_platforms(self): + """Test case for list_challenge_platforms + + List challenge platforms # noqa: E501 + """ + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_challenge_platform_direction.py b/libs/openchallenges/api-client-python/test/test_challenge_platform_direction.py new file mode 100644 index 0000000000..8b7e02ec98 --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_challenge_platform_direction.py @@ -0,0 +1,36 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +import openchallenges_client +from openchallenges_client.models.challenge_platform_direction import ChallengePlatformDirection # noqa: E501 +from openchallenges_client.rest import ApiException + +class TestChallengePlatformDirection(unittest.TestCase): + """ChallengePlatformDirection unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testChallengePlatformDirection(self): + """Test ChallengePlatformDirection""" + # inst = ChallengePlatformDirection() + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_challenge_platform_search_query.py b/libs/openchallenges/api-client-python/test/test_challenge_platform_search_query.py new file mode 100644 index 0000000000..33a57648ba --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_challenge_platform_search_query.py @@ -0,0 +1,58 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +import openchallenges_client +from openchallenges_client.models.challenge_platform_search_query import ChallengePlatformSearchQuery # noqa: E501 +from openchallenges_client.rest import ApiException + +class TestChallengePlatformSearchQuery(unittest.TestCase): + """ChallengePlatformSearchQuery unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional): + """Test ChallengePlatformSearchQuery + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `ChallengePlatformSearchQuery` + """ + model = openchallenges_client.models.challenge_platform_search_query.ChallengePlatformSearchQuery() # noqa: E501 + if include_optional : + return ChallengePlatformSearchQuery( + page_number = 0, + page_size = 1, + sort = 'relevance', + direction = 'asc', + search_terms = 'synapse' + ) + else : + return ChallengePlatformSearchQuery( + ) + """ + + def testChallengePlatformSearchQuery(self): + """Test ChallengePlatformSearchQuery""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_challenge_platform_sort.py b/libs/openchallenges/api-client-python/test/test_challenge_platform_sort.py new file mode 100644 index 0000000000..39ce4408a8 --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_challenge_platform_sort.py @@ -0,0 +1,36 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +import openchallenges_client +from openchallenges_client.models.challenge_platform_sort import ChallengePlatformSort # noqa: E501 +from openchallenges_client.rest import ApiException + +class TestChallengePlatformSort(unittest.TestCase): + """ChallengePlatformSort unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testChallengePlatformSort(self): + """Test ChallengePlatformSort""" + # inst = ChallengePlatformSort() + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_challenge_platforms_page.py b/libs/openchallenges/api-client-python/test/test_challenge_platforms_page.py new file mode 100644 index 0000000000..5e5e6d72cc --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_challenge_platforms_page.py @@ -0,0 +1,85 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +import openchallenges_client +from openchallenges_client.models.challenge_platforms_page import ChallengePlatformsPage # noqa: E501 +from openchallenges_client.rest import ApiException + +class TestChallengePlatformsPage(unittest.TestCase): + """ChallengePlatformsPage unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional): + """Test ChallengePlatformsPage + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `ChallengePlatformsPage` + """ + model = openchallenges_client.models.challenge_platforms_page.ChallengePlatformsPage() # noqa: E501 + if include_optional : + return ChallengePlatformsPage( + number = 99, + size = 99, + total_elements = 99, + total_pages = 99, + has_next = True, + has_previous = True, + challenge_platforms = [ + openchallenges_client.models.challenge_platform.ChallengePlatform( + id = 1, + slug = 'example-challenge-platform', + name = '012', + avatar_url = 'https://via.placeholder.com/300.png', + website_url = 'https://example.com', + created_at = '2022-07-04T22:19:11Z', + updated_at = '2022-07-04T22:19:11Z', ) + ] + ) + else : + return ChallengePlatformsPage( + number = 99, + size = 99, + total_elements = 99, + total_pages = 99, + has_next = True, + has_previous = True, + challenge_platforms = [ + openchallenges_client.models.challenge_platform.ChallengePlatform( + id = 1, + slug = 'example-challenge-platform', + name = '012', + avatar_url = 'https://via.placeholder.com/300.png', + website_url = 'https://example.com', + created_at = '2022-07-04T22:19:11Z', + updated_at = '2022-07-04T22:19:11Z', ) + ], + ) + """ + + def testChallengePlatformsPage(self): + """Test ChallengePlatformsPage""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_challenge_search_query.py b/libs/openchallenges/api-client-python/test/test_challenge_search_query.py new file mode 100644 index 0000000000..d8be5a4cd1 --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_challenge_search_query.py @@ -0,0 +1,85 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +import openchallenges_client +from openchallenges_client.models.challenge_search_query import ChallengeSearchQuery # noqa: E501 +from openchallenges_client.rest import ApiException + +class TestChallengeSearchQuery(unittest.TestCase): + """ChallengeSearchQuery unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional): + """Test ChallengeSearchQuery + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `ChallengeSearchQuery` + """ + model = openchallenges_client.models.challenge_search_query.ChallengeSearchQuery() # noqa: E501 + if include_optional : + return ChallengeSearchQuery( + page_number = 0, + page_size = 1, + sort = 'relevance', + sort_seed = 0, + direction = 'asc', + difficulties = [ + 'intermediate' + ], + incentives = [ + 'publication' + ], + min_start_date = 'Fri Jul 21 00:00:00 UTC 2017', + max_start_date = 'Fri Jul 21 00:00:00 UTC 2017', + platforms = [ + 'example-challenge-platform' + ], + organizations = [ + 1 + ], + input_data_types = [ + 'gene-expression' + ], + status = [ + 'active' + ], + submission_types = [ + 'container_image' + ], + categories = [ + 'featured' + ], + search_terms = 'dream challenge' + ) + else : + return ChallengeSearchQuery( + ) + """ + + def testChallengeSearchQuery(self): + """Test ChallengeSearchQuery""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_challenge_sort.py b/libs/openchallenges/api-client-python/test/test_challenge_sort.py new file mode 100644 index 0000000000..bc20dfba35 --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_challenge_sort.py @@ -0,0 +1,36 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +import openchallenges_client +from openchallenges_client.models.challenge_sort import ChallengeSort # noqa: E501 +from openchallenges_client.rest import ApiException + +class TestChallengeSort(unittest.TestCase): + """ChallengeSort unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testChallengeSort(self): + """Test ChallengeSort""" + # inst = ChallengeSort() + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_challenge_status.py b/libs/openchallenges/api-client-python/test/test_challenge_status.py new file mode 100644 index 0000000000..47843efff4 --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_challenge_status.py @@ -0,0 +1,36 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +import openchallenges_client +from openchallenges_client.models.challenge_status import ChallengeStatus # noqa: E501 +from openchallenges_client.rest import ApiException + +class TestChallengeStatus(unittest.TestCase): + """ChallengeStatus unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testChallengeStatus(self): + """Test ChallengeStatus""" + # inst = ChallengeStatus() + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_challenge_submission_type.py b/libs/openchallenges/api-client-python/test/test_challenge_submission_type.py new file mode 100644 index 0000000000..ad433019c2 --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_challenge_submission_type.py @@ -0,0 +1,36 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +import openchallenges_client +from openchallenges_client.models.challenge_submission_type import ChallengeSubmissionType # noqa: E501 +from openchallenges_client.rest import ApiException + +class TestChallengeSubmissionType(unittest.TestCase): + """ChallengeSubmissionType unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testChallengeSubmissionType(self): + """Test ChallengeSubmissionType""" + # inst = ChallengeSubmissionType() + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_challenges_page.py b/libs/openchallenges/api-client-python/test/test_challenges_page.py new file mode 100644 index 0000000000..26b503534b --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_challenges_page.py @@ -0,0 +1,133 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +import openchallenges_client +from openchallenges_client.models.challenges_page import ChallengesPage # noqa: E501 +from openchallenges_client.rest import ApiException + +class TestChallengesPage(unittest.TestCase): + """ChallengesPage unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional): + """Test ChallengesPage + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `ChallengesPage` + """ + model = openchallenges_client.models.challenges_page.ChallengesPage() # noqa: E501 + if include_optional : + return ChallengesPage( + number = 99, + size = 99, + total_elements = 99, + total_pages = 99, + has_next = True, + has_previous = True, + challenges = [ + openchallenges_client.models.challenge.Challenge( + id = 1, + slug = 'awesome-challenge', + name = '012', + headline = 'Example challenge headline', + description = 'This is an example description of the challenge.', + doi = '', + status = 'active', + difficulty = 'intermediate', + platform = openchallenges_client.models.simple_challenge_platform.SimpleChallengePlatform( + id = 1, + slug = 'example-challenge-platform', + name = '012', ), + website_url = '', + avatar_url = '', + incentives = [ + 'publication' + ], + submission_types = [ + 'container_image' + ], + input_data_types = [ + openchallenges_client.models.simple_challenge_input_data_type.SimpleChallengeInputDataType( + id = 1, + slug = 'gene-expression', + name = 'gene expression', ) + ], + start_date = 'Fri Jul 21 00:00:00 UTC 2017', + end_date = 'Fri Jul 21 00:00:00 UTC 2017', + starred_count = 56, + created_at = '2022-07-04T22:19:11Z', + updated_at = '2022-07-04T22:19:11Z', ) + ] + ) + else : + return ChallengesPage( + number = 99, + size = 99, + total_elements = 99, + total_pages = 99, + has_next = True, + has_previous = True, + challenges = [ + openchallenges_client.models.challenge.Challenge( + id = 1, + slug = 'awesome-challenge', + name = '012', + headline = 'Example challenge headline', + description = 'This is an example description of the challenge.', + doi = '', + status = 'active', + difficulty = 'intermediate', + platform = openchallenges_client.models.simple_challenge_platform.SimpleChallengePlatform( + id = 1, + slug = 'example-challenge-platform', + name = '012', ), + website_url = '', + avatar_url = '', + incentives = [ + 'publication' + ], + submission_types = [ + 'container_image' + ], + input_data_types = [ + openchallenges_client.models.simple_challenge_input_data_type.SimpleChallengeInputDataType( + id = 1, + slug = 'gene-expression', + name = 'gene expression', ) + ], + start_date = 'Fri Jul 21 00:00:00 UTC 2017', + end_date = 'Fri Jul 21 00:00:00 UTC 2017', + starred_count = 56, + created_at = '2022-07-04T22:19:11Z', + updated_at = '2022-07-04T22:19:11Z', ) + ], + ) + """ + + def testChallengesPage(self): + """Test ChallengesPage""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_challenges_per_year.py b/libs/openchallenges/api-client-python/test/test_challenges_per_year.py new file mode 100644 index 0000000000..dbf89292f5 --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_challenges_per_year.py @@ -0,0 +1,65 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +import openchallenges_client +from openchallenges_client.models.challenges_per_year import ChallengesPerYear # noqa: E501 +from openchallenges_client.rest import ApiException + +class TestChallengesPerYear(unittest.TestCase): + """ChallengesPerYear unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional): + """Test ChallengesPerYear + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `ChallengesPerYear` + """ + model = openchallenges_client.models.challenges_per_year.ChallengesPerYear() # noqa: E501 + if include_optional : + return ChallengesPerYear( + years = [ + '' + ], + challenge_counts = [ + 56 + ] + ) + else : + return ChallengesPerYear( + years = [ + '' + ], + challenge_counts = [ + 56 + ], + ) + """ + + def testChallengesPerYear(self): + """Test ChallengesPerYear""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_image.py b/libs/openchallenges/api-client-python/test/test_image.py new file mode 100644 index 0000000000..10721dacdc --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_image.py @@ -0,0 +1,55 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +import openchallenges_client +from openchallenges_client.models.image import Image # noqa: E501 +from openchallenges_client.rest import ApiException + +class TestImage(unittest.TestCase): + """Image unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional): + """Test Image + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `Image` + """ + model = openchallenges_client.models.image.Image() # noqa: E501 + if include_optional : + return Image( + url = 'http://example.com/an-image.png' + ) + else : + return Image( + url = 'http://example.com/an-image.png', + ) + """ + + def testImage(self): + """Test Image""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_image_api.py b/libs/openchallenges/api-client-python/test/test_image_api.py new file mode 100644 index 0000000000..24436da3fd --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_image_api.py @@ -0,0 +1,40 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +import openchallenges_client +from openchallenges_client.api.image_api import ImageApi # noqa: E501 +from openchallenges_client.rest import ApiException + + +class TestImageApi(unittest.TestCase): + """ImageApi unit test stubs""" + + def setUp(self): + self.api = openchallenges_client.api.image_api.ImageApi() # noqa: E501 + + def tearDown(self): + pass + + def test_get_image(self): + """Test case for get_image + + Get an image # noqa: E501 + """ + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_image_aspect_ratio.py b/libs/openchallenges/api-client-python/test/test_image_aspect_ratio.py new file mode 100644 index 0000000000..c16eeb3b3d --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_image_aspect_ratio.py @@ -0,0 +1,36 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +import openchallenges_client +from openchallenges_client.models.image_aspect_ratio import ImageAspectRatio # noqa: E501 +from openchallenges_client.rest import ApiException + +class TestImageAspectRatio(unittest.TestCase): + """ImageAspectRatio unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testImageAspectRatio(self): + """Test ImageAspectRatio""" + # inst = ImageAspectRatio() + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_image_height.py b/libs/openchallenges/api-client-python/test/test_image_height.py new file mode 100644 index 0000000000..8d9efca301 --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_image_height.py @@ -0,0 +1,36 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +import openchallenges_client +from openchallenges_client.models.image_height import ImageHeight # noqa: E501 +from openchallenges_client.rest import ApiException + +class TestImageHeight(unittest.TestCase): + """ImageHeight unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testImageHeight(self): + """Test ImageHeight""" + # inst = ImageHeight() + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_image_query.py b/libs/openchallenges/api-client-python/test/test_image_query.py new file mode 100644 index 0000000000..3b7ae86805 --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_image_query.py @@ -0,0 +1,57 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +import openchallenges_client +from openchallenges_client.models.image_query import ImageQuery # noqa: E501 +from openchallenges_client.rest import ApiException + +class TestImageQuery(unittest.TestCase): + """ImageQuery unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional): + """Test ImageQuery + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `ImageQuery` + """ + model = openchallenges_client.models.image_query.ImageQuery() # noqa: E501 + if include_optional : + return ImageQuery( + object_key = 'logo/dream.png', + height = 'original', + aspect_ratio = 'original' + ) + else : + return ImageQuery( + object_key = 'logo/dream.png', + ) + """ + + def testImageQuery(self): + """Test ImageQuery""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_organization.py b/libs/openchallenges/api-client-python/test/test_organization.py new file mode 100644 index 0000000000..89d17b6526 --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_organization.py @@ -0,0 +1,72 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +import openchallenges_client +from openchallenges_client.models.organization import Organization # noqa: E501 +from openchallenges_client.rest import ApiException + +class TestOrganization(unittest.TestCase): + """Organization unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional): + """Test Organization + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `Organization` + """ + model = openchallenges_client.models.organization.Organization() # noqa: E501 + if include_optional : + return Organization( + id = 1, + name = 'Example organization', + email = 'john.smith@example.com', + login = 'example-org', + description = 'A description of the organization.', + avatar_key = 'logo/dream.png', + website_url = 'https://example.com', + challenge_count = 10, + created_at = '2022-07-04T22:19:11Z', + updated_at = '2022-07-04T22:19:11Z', + acronym = 'OC' + ) + else : + return Organization( + id = 1, + name = 'Example organization', + email = 'john.smith@example.com', + login = 'example-org', + description = 'A description of the organization.', + website_url = 'https://example.com', + created_at = '2022-07-04T22:19:11Z', + updated_at = '2022-07-04T22:19:11Z', + ) + """ + + def testOrganization(self): + """Test Organization""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_organization_api.py b/libs/openchallenges/api-client-python/test/test_organization_api.py new file mode 100644 index 0000000000..24aa8a86cf --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_organization_api.py @@ -0,0 +1,47 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +import openchallenges_client +from openchallenges_client.api.organization_api import OrganizationApi # noqa: E501 +from openchallenges_client.rest import ApiException + + +class TestOrganizationApi(unittest.TestCase): + """OrganizationApi unit test stubs""" + + def setUp(self): + self.api = openchallenges_client.api.organization_api.OrganizationApi() # noqa: E501 + + def tearDown(self): + pass + + def test_get_organization(self): + """Test case for get_organization + + Get an organization # noqa: E501 + """ + pass + + def test_list_organizations(self): + """Test case for list_organizations + + List organizations # noqa: E501 + """ + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_organization_category.py b/libs/openchallenges/api-client-python/test/test_organization_category.py new file mode 100644 index 0000000000..03d4f9dec5 --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_organization_category.py @@ -0,0 +1,36 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +import openchallenges_client +from openchallenges_client.models.organization_category import OrganizationCategory # noqa: E501 +from openchallenges_client.rest import ApiException + +class TestOrganizationCategory(unittest.TestCase): + """OrganizationCategory unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testOrganizationCategory(self): + """Test OrganizationCategory""" + # inst = OrganizationCategory() + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_organization_direction.py b/libs/openchallenges/api-client-python/test/test_organization_direction.py new file mode 100644 index 0000000000..99dc867aa8 --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_organization_direction.py @@ -0,0 +1,36 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +import openchallenges_client +from openchallenges_client.models.organization_direction import OrganizationDirection # noqa: E501 +from openchallenges_client.rest import ApiException + +class TestOrganizationDirection(unittest.TestCase): + """OrganizationDirection unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testOrganizationDirection(self): + """Test OrganizationDirection""" + # inst = OrganizationDirection() + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_organization_search_query.py b/libs/openchallenges/api-client-python/test/test_organization_search_query.py new file mode 100644 index 0000000000..1e35bef2bb --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_organization_search_query.py @@ -0,0 +1,64 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +import openchallenges_client +from openchallenges_client.models.organization_search_query import OrganizationSearchQuery # noqa: E501 +from openchallenges_client.rest import ApiException + +class TestOrganizationSearchQuery(unittest.TestCase): + """OrganizationSearchQuery unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional): + """Test OrganizationSearchQuery + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `OrganizationSearchQuery` + """ + model = openchallenges_client.models.organization_search_query.OrganizationSearchQuery() # noqa: E501 + if include_optional : + return OrganizationSearchQuery( + page_number = 0, + page_size = 1, + categories = [ + 'featured' + ], + challenge_contribution_roles = [ + 'challenge_organizer' + ], + sort = 'relevance', + direction = 'asc', + search_terms = 'data provider' + ) + else : + return OrganizationSearchQuery( + ) + """ + + def testOrganizationSearchQuery(self): + """Test OrganizationSearchQuery""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_organization_sort.py b/libs/openchallenges/api-client-python/test/test_organization_sort.py new file mode 100644 index 0000000000..5d6c71098d --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_organization_sort.py @@ -0,0 +1,36 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +import openchallenges_client +from openchallenges_client.models.organization_sort import OrganizationSort # noqa: E501 +from openchallenges_client.rest import ApiException + +class TestOrganizationSort(unittest.TestCase): + """OrganizationSort unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testOrganizationSort(self): + """Test OrganizationSort""" + # inst = OrganizationSort() + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_organizations_page.py b/libs/openchallenges/api-client-python/test/test_organizations_page.py new file mode 100644 index 0000000000..a4e2dbe626 --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_organizations_page.py @@ -0,0 +1,93 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +import openchallenges_client +from openchallenges_client.models.organizations_page import OrganizationsPage # noqa: E501 +from openchallenges_client.rest import ApiException + +class TestOrganizationsPage(unittest.TestCase): + """OrganizationsPage unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional): + """Test OrganizationsPage + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `OrganizationsPage` + """ + model = openchallenges_client.models.organizations_page.OrganizationsPage() # noqa: E501 + if include_optional : + return OrganizationsPage( + number = 99, + size = 99, + total_elements = 99, + total_pages = 99, + has_next = True, + has_previous = True, + organizations = [ + openchallenges_client.models.organization.Organization( + id = 1, + name = 'Example organization', + email = 'john.smith@example.com', + login = 'example-org', + description = 'A description of the organization.', + avatar_key = 'logo/dream.png', + website_url = 'https://example.com', + challenge_count = 10, + created_at = '2022-07-04T22:19:11Z', + updated_at = '2022-07-04T22:19:11Z', + acronym = 'OC', ) + ] + ) + else : + return OrganizationsPage( + number = 99, + size = 99, + total_elements = 99, + total_pages = 99, + has_next = True, + has_previous = True, + organizations = [ + openchallenges_client.models.organization.Organization( + id = 1, + name = 'Example organization', + email = 'john.smith@example.com', + login = 'example-org', + description = 'A description of the organization.', + avatar_key = 'logo/dream.png', + website_url = 'https://example.com', + challenge_count = 10, + created_at = '2022-07-04T22:19:11Z', + updated_at = '2022-07-04T22:19:11Z', + acronym = 'OC', ) + ], + ) + """ + + def testOrganizationsPage(self): + """Test OrganizationsPage""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_page_metadata.py b/libs/openchallenges/api-client-python/test/test_page_metadata.py new file mode 100644 index 0000000000..3df7c39a33 --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_page_metadata.py @@ -0,0 +1,65 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +import openchallenges_client +from openchallenges_client.models.page_metadata import PageMetadata # noqa: E501 +from openchallenges_client.rest import ApiException + +class TestPageMetadata(unittest.TestCase): + """PageMetadata unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional): + """Test PageMetadata + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `PageMetadata` + """ + model = openchallenges_client.models.page_metadata.PageMetadata() # noqa: E501 + if include_optional : + return PageMetadata( + number = 99, + size = 99, + total_elements = 99, + total_pages = 99, + has_next = True, + has_previous = True + ) + else : + return PageMetadata( + number = 99, + size = 99, + total_elements = 99, + total_pages = 99, + has_next = True, + has_previous = True, + ) + """ + + def testPageMetadata(self): + """Test PageMetadata""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_simple_challenge_input_data_type.py b/libs/openchallenges/api-client-python/test/test_simple_challenge_input_data_type.py new file mode 100644 index 0000000000..64814f0ac2 --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_simple_challenge_input_data_type.py @@ -0,0 +1,59 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +import openchallenges_client +from openchallenges_client.models.simple_challenge_input_data_type import SimpleChallengeInputDataType # noqa: E501 +from openchallenges_client.rest import ApiException + +class TestSimpleChallengeInputDataType(unittest.TestCase): + """SimpleChallengeInputDataType unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional): + """Test SimpleChallengeInputDataType + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `SimpleChallengeInputDataType` + """ + model = openchallenges_client.models.simple_challenge_input_data_type.SimpleChallengeInputDataType() # noqa: E501 + if include_optional : + return SimpleChallengeInputDataType( + id = 1, + slug = 'gene-expression', + name = 'gene expression' + ) + else : + return SimpleChallengeInputDataType( + id = 1, + slug = 'gene-expression', + name = 'gene expression', + ) + """ + + def testSimpleChallengeInputDataType(self): + """Test SimpleChallengeInputDataType""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_simple_challenge_platform.py b/libs/openchallenges/api-client-python/test/test_simple_challenge_platform.py new file mode 100644 index 0000000000..145d7b05f6 --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_simple_challenge_platform.py @@ -0,0 +1,59 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +import openchallenges_client +from openchallenges_client.models.simple_challenge_platform import SimpleChallengePlatform # noqa: E501 +from openchallenges_client.rest import ApiException + +class TestSimpleChallengePlatform(unittest.TestCase): + """SimpleChallengePlatform unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional): + """Test SimpleChallengePlatform + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `SimpleChallengePlatform` + """ + model = openchallenges_client.models.simple_challenge_platform.SimpleChallengePlatform() # noqa: E501 + if include_optional : + return SimpleChallengePlatform( + id = 1, + slug = 'example-challenge-platform', + name = '012' + ) + else : + return SimpleChallengePlatform( + id = 1, + slug = 'example-challenge-platform', + name = '012', + ) + """ + + def testSimpleChallengePlatform(self): + """Test SimpleChallengePlatform""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_user.py b/libs/openchallenges/api-client-python/test/test_user.py new file mode 100644 index 0000000000..ac88b7f56b --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_user.py @@ -0,0 +1,68 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +import openchallenges_client +from openchallenges_client.models.user import User # noqa: E501 +from openchallenges_client.rest import ApiException + +class TestUser(unittest.TestCase): + """User unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional): + """Test User + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `User` + """ + model = openchallenges_client.models.user.User() # noqa: E501 + if include_optional : + return User( + id = 1, + login = '', + email = 'john.smith@example.com', + name = '', + status = 'pending', + avatar_url = 'https://example.com/awesome-avatar.png', + created_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + updated_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + type = 'User', + bio = '' + ) + else : + return User( + login = '', + email = 'john.smith@example.com', + created_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + updated_at = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + type = 'User', + ) + """ + + def testUser(self): + """Test User""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_user_api.py b/libs/openchallenges/api-client-python/test/test_user_api.py new file mode 100644 index 0000000000..e8ee75e662 --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_user_api.py @@ -0,0 +1,61 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +import openchallenges_client +from openchallenges_client.api.user_api import UserApi # noqa: E501 +from openchallenges_client.rest import ApiException + + +class TestUserApi(unittest.TestCase): + """UserApi unit test stubs""" + + def setUp(self): + self.api = openchallenges_client.api.user_api.UserApi() # noqa: E501 + + def tearDown(self): + pass + + def test_create_user(self): + """Test case for create_user + + Create a user # noqa: E501 + """ + pass + + def test_delete_user(self): + """Test case for delete_user + + Delete a user # noqa: E501 + """ + pass + + def test_get_user(self): + """Test case for get_user + + Get a user # noqa: E501 + """ + pass + + def test_list_users(self): + """Test case for list_users + + Get all users # noqa: E501 + """ + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_user_create_request.py b/libs/openchallenges/api-client-python/test/test_user_create_request.py new file mode 100644 index 0000000000..c87b4e4e8e --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_user_create_request.py @@ -0,0 +1,62 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +import openchallenges_client +from openchallenges_client.models.user_create_request import UserCreateRequest # noqa: E501 +from openchallenges_client.rest import ApiException + +class TestUserCreateRequest(unittest.TestCase): + """UserCreateRequest unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional): + """Test UserCreateRequest + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `UserCreateRequest` + """ + model = openchallenges_client.models.user_create_request.UserCreateRequest() # noqa: E501 + if include_optional : + return UserCreateRequest( + login = '', + email = 'john.smith@example.com', + password = '', + name = '', + avatar_url = 'https://example.com/awesome-avatar.png', + bio = '' + ) + else : + return UserCreateRequest( + login = '', + email = 'john.smith@example.com', + password = '', + ) + """ + + def testUserCreateRequest(self): + """Test UserCreateRequest""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_user_create_response.py b/libs/openchallenges/api-client-python/test/test_user_create_response.py new file mode 100644 index 0000000000..550293e202 --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_user_create_response.py @@ -0,0 +1,55 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +import openchallenges_client +from openchallenges_client.models.user_create_response import UserCreateResponse # noqa: E501 +from openchallenges_client.rest import ApiException + +class TestUserCreateResponse(unittest.TestCase): + """UserCreateResponse unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional): + """Test UserCreateResponse + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `UserCreateResponse` + """ + model = openchallenges_client.models.user_create_response.UserCreateResponse() # noqa: E501 + if include_optional : + return UserCreateResponse( + id = 1 + ) + else : + return UserCreateResponse( + id = 1, + ) + """ + + def testUserCreateResponse(self): + """Test UserCreateResponse""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_user_status.py b/libs/openchallenges/api-client-python/test/test_user_status.py new file mode 100644 index 0000000000..b5cd788228 --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_user_status.py @@ -0,0 +1,36 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +import openchallenges_client +from openchallenges_client.models.user_status import UserStatus # noqa: E501 +from openchallenges_client.rest import ApiException + +class TestUserStatus(unittest.TestCase): + """UserStatus unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testUserStatus(self): + """Test UserStatus""" + # inst = UserStatus() + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/test/test_users_page.py b/libs/openchallenges/api-client-python/test/test_users_page.py new file mode 100644 index 0000000000..3e237745f6 --- /dev/null +++ b/libs/openchallenges/api-client-python/test/test_users_page.py @@ -0,0 +1,71 @@ +# coding: utf-8 + +""" + OpenChallenges REST API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest +import datetime + +import openchallenges_client +from openchallenges_client.models.users_page import UsersPage # noqa: E501 +from openchallenges_client.rest import ApiException + +class TestUsersPage(unittest.TestCase): + """UsersPage unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional): + """Test UsersPage + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `UsersPage` + """ + model = openchallenges_client.models.users_page.UsersPage() # noqa: E501 + if include_optional : + return UsersPage( + number = 99, + size = 99, + total_elements = 99, + total_pages = 99, + has_next = True, + has_previous = True, + users = [ + {"login":"awesome-user","email":"awesome-user@example.org","name":"Awesome User","status":"approved","avatarUrl":"https://example.com/awesome-avatar.png","bio":"A great bio","createdAt":"2017-07-08T16:18:44-04:00","updatedAt":"2017-07-08T16:18:44-04:00","type":"User"} + ] + ) + else : + return UsersPage( + number = 99, + size = 99, + total_elements = 99, + total_pages = 99, + has_next = True, + has_previous = True, + users = [ + {"login":"awesome-user","email":"awesome-user@example.org","name":"Awesome User","status":"approved","avatarUrl":"https://example.com/awesome-avatar.png","bio":"A great bio","createdAt":"2017-07-08T16:18:44-04:00","updatedAt":"2017-07-08T16:18:44-04:00","type":"User"} + ], + ) + """ + + def testUsersPage(self): + """Test UsersPage""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/libs/openchallenges/api-client-python/tox.ini b/libs/openchallenges/api-client-python/tox.ini new file mode 100644 index 0000000000..b5bd6bde07 --- /dev/null +++ b/libs/openchallenges/api-client-python/tox.ini @@ -0,0 +1,9 @@ +[tox] +envlist = py3 + +[testenv] +deps=-r{toxinidir}/requirements.txt + -r{toxinidir}/test-requirements.txt + +commands= + pytest --cov=openchallenges_client diff --git a/libs/openchallenges/api-description/build/challenge.openapi.yaml b/libs/openchallenges/api-description/build/challenge.openapi.yaml index c41ed7d7c9..47e9d26e0e 100644 --- a/libs/openchallenges/api-description/build/challenge.openapi.yaml +++ b/libs/openchallenges/api-description/build/challenge.openapi.yaml @@ -372,14 +372,14 @@ components: description: The slug of the challenge. type: string minLength: 3 - maxLength: 60 + maxLength: 255 pattern: ^[a-z0-9]+(?:-[a-z0-9]+)*$ example: awesome-challenge ChallengeName: description: The name of the challenge. type: string minLength: 3 - maxLength: 60 + maxLength: 255 ChallengeHeadline: description: The headline of the challenge. type: string @@ -390,7 +390,7 @@ components: description: The description of the challenge. type: string minLength: 0 - maxLength: 280 + maxLength: 1000 example: This is an example description of the challenge. ChallengePlatformId: description: The unique identifier of a challenge platform. diff --git a/libs/openchallenges/api-description/build/openapi.yaml b/libs/openchallenges/api-description/build/openapi.yaml index ebfaab86de..e8700d7be9 100644 --- a/libs/openchallenges/api-description/build/openapi.yaml +++ b/libs/openchallenges/api-description/build/openapi.yaml @@ -524,14 +524,14 @@ components: description: The slug of the challenge. type: string minLength: 3 - maxLength: 60 + maxLength: 255 pattern: '^[a-z0-9]+(?:-[a-z0-9]+)*$' example: awesome-challenge ChallengeName: description: The name of the challenge. type: string minLength: 3 - maxLength: 60 + maxLength: 255 ChallengeHeadline: description: The headline of the challenge. type: string @@ -542,7 +542,7 @@ components: description: The description of the challenge. type: string minLength: 0 - maxLength: 280 + maxLength: 1000 example: This is an example description of the challenge. ChallengePlatformId: description: The unique identifier of a challenge platform. diff --git a/libs/openchallenges/api-description/src/components/schemas/ChallengeDescription.yaml b/libs/openchallenges/api-description/src/components/schemas/ChallengeDescription.yaml index 57df25a751..a6b2c13cbd 100644 --- a/libs/openchallenges/api-description/src/components/schemas/ChallengeDescription.yaml +++ b/libs/openchallenges/api-description/src/components/schemas/ChallengeDescription.yaml @@ -1,5 +1,5 @@ description: The description of the challenge. type: string minLength: 0 -maxLength: 280 +maxLength: 1000 example: This is an example description of the challenge. diff --git a/libs/openchallenges/api-description/src/components/schemas/ChallengeName.yaml b/libs/openchallenges/api-description/src/components/schemas/ChallengeName.yaml index db1dc2773b..b4a35fe1a9 100644 --- a/libs/openchallenges/api-description/src/components/schemas/ChallengeName.yaml +++ b/libs/openchallenges/api-description/src/components/schemas/ChallengeName.yaml @@ -1,4 +1,4 @@ description: The name of the challenge. type: string minLength: 3 -maxLength: 60 +maxLength: 255 diff --git a/libs/openchallenges/api-description/src/components/schemas/ChallengeSlug.yaml b/libs/openchallenges/api-description/src/components/schemas/ChallengeSlug.yaml index 0f0bf7a444..284b516d69 100644 --- a/libs/openchallenges/api-description/src/components/schemas/ChallengeSlug.yaml +++ b/libs/openchallenges/api-description/src/components/schemas/ChallengeSlug.yaml @@ -1,6 +1,6 @@ description: The slug of the challenge. type: string minLength: 3 -maxLength: 60 +maxLength: 255 pattern: '^[a-z0-9]+(?:-[a-z0-9]+)*$' example: awesome-challenge