From 8540a9332cda7bcbac92643cacbb5146f35080e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=9Clgen=20Sar=C4=B1kavak?= Date: Thu, 4 May 2023 15:19:24 +0300 Subject: [PATCH 1/2] Add support for Python 3.11 (#1365) * Add support for Python 3.11 * Fix Python 3.11 compatibility matrix * Add temporary fix for default enum description --------- Co-authored-by: Firas Kafri --- .github/workflows/deploy.yml | 4 ++-- .github/workflows/lint.yml | 4 ++-- .github/workflows/tests.yml | 2 ++ .pre-commit-config.yaml | 2 +- graphene_django/converter.py | 7 ++++++- setup.py | 1 + tox.ini | 2 ++ 7 files changed, 16 insertions(+), 6 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index a733c03..139c6f6 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -11,10 +11,10 @@ jobs: steps: - uses: actions/checkout@v3 - - name: Set up Python 3.10 + - name: Set up Python 3.11 uses: actions/setup-python@v4 with: - python-version: '3.10' + python-version: '3.11' - name: Build wheel and source tarball run: | pip install wheel diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 8cee90a..bfafa67 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -8,10 +8,10 @@ jobs: steps: - uses: actions/checkout@v3 - - name: Set up Python 3.10 + - name: Set up Python 3.11 uses: actions/setup-python@v4 with: - python-version: '3.10' + python-version: '3.11' - name: Install dependencies run: | python -m pip install --upgrade pip diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 31b479e..2c5b755 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -13,6 +13,8 @@ jobs: include: - django: "3.2" python-version: "3.7" + - django: "4.1" + python-version: "3.11" steps: - uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index adb54c7..9214d35 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,5 +1,5 @@ default_language_version: - python: python3.10 + python: python3.11 repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.4.0 diff --git a/graphene_django/converter.py b/graphene_django/converter.py index 9ad6c9d..375d683 100644 --- a/graphene_django/converter.py +++ b/graphene_django/converter.py @@ -96,7 +96,12 @@ def convert_choices_to_named_enum_with_descriptions(name, choices): def description(self): return str(named_choices_descriptions[self.name]) - return_type = Enum(name, list(named_choices), type=EnumWithDescriptionsType) + return_type = Enum( + name, + list(named_choices), + type=EnumWithDescriptionsType, + description="An enumeration.", # Temporary fix until https://github.com/graphql-python/graphene/pull/1502 is merged + ) return return_type diff --git a/setup.py b/setup.py index 96da8ff..37b57a8 100644 --- a/setup.py +++ b/setup.py @@ -51,6 +51,7 @@ setup( "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", "Programming Language :: Python :: Implementation :: PyPy", "Framework :: Django", "Framework :: Django :: 3.2", diff --git a/tox.ini b/tox.ini index 285d046..e186f30 100644 --- a/tox.ini +++ b/tox.ini @@ -2,6 +2,7 @@ envlist = py{37,38,39,310}-django32, py{38,39,310}-django{40,41,main}, + py311-django{41,main} pre-commit [gh-actions] @@ -10,6 +11,7 @@ python = 3.8: py38 3.9: py39 3.10: py310 + 3.11: py311 [gh-actions:env] DJANGO = From 52f992183fcdbb841930357be086b2488f9d8472 Mon Sep 17 00:00:00 2001 From: Kien Dang Date: Fri, 5 May 2023 03:06:10 +0800 Subject: [PATCH 2/2] Add GraphiQL Explorer plugin (#1397) --- .../static/graphene_django/graphiql.js | 52 +++++++++++++------ .../templates/graphene/graphiql.html | 3 ++ graphene_django/views.py | 5 ++ 3 files changed, 45 insertions(+), 15 deletions(-) diff --git a/graphene_django/static/graphene_django/graphiql.js b/graphene_django/static/graphene_django/graphiql.js index 5b9d96d..901c991 100644 --- a/graphene_django/static/graphene_django/graphiql.js +++ b/graphene_django/static/graphene_django/graphiql.js @@ -6,6 +6,7 @@ React, ReactDOM, graphqlWs, + GraphiQLPluginExplorer, fetch, history, location, @@ -98,24 +99,44 @@ function updateURL() { history.replaceState(null, null, locationQuery(parameters)); } - var options = { - fetcher: graphQLFetcher, - onEditQuery: onEditQuery, - onEditVariables: onEditVariables, - onEditOperationName: onEditOperationName, - isHeadersEditorEnabled: GRAPHENE_SETTINGS.graphiqlHeaderEditorEnabled, - shouldPersistHeaders: GRAPHENE_SETTINGS.graphiqlShouldPersistHeaders, - query: parameters.query, - }; - if (parameters.variables) { - options.variables = parameters.variables; - } - if (parameters.operation_name) { - options.operationName = parameters.operation_name; + + function GraphiQLWithExplorer() { + var [query, setQuery] = React.useState(parameters.query); + + function handleQuery(query) { + setQuery(query); + onEditQuery(query); + } + + var explorerPlugin = GraphiQLPluginExplorer.useExplorerPlugin({ + query: query, + onEdit: handleQuery, + }); + + var options = { + fetcher: graphQLFetcher, + plugins: [explorerPlugin], + defaultEditorToolsVisibility: true, + onEditQuery: handleQuery, + onEditVariables: onEditVariables, + onEditOperationName: onEditOperationName, + isHeadersEditorEnabled: GRAPHENE_SETTINGS.graphiqlHeaderEditorEnabled, + shouldPersistHeaders: GRAPHENE_SETTINGS.graphiqlShouldPersistHeaders, + query: query, + }; + if (parameters.variables) { + options.variables = parameters.variables; + } + if (parameters.operation_name) { + options.operationName = parameters.operation_name; + } + + return React.createElement(GraphiQL, options); } + // Render into the body. ReactDOM.render( - React.createElement(GraphiQL, options), + React.createElement(GraphiQLWithExplorer), document.getElementById("editor"), ); })( @@ -126,6 +147,7 @@ window.React, window.ReactDOM, window.graphqlWs, + window.GraphiQLPluginExplorer, window.fetch, window.history, window.location, diff --git a/graphene_django/templates/graphene/graphiql.html b/graphene_django/templates/graphene/graphiql.html index 8fb00c4..ddff8fc 100644 --- a/graphene_django/templates/graphene/graphiql.html +++ b/graphene_django/templates/graphene/graphiql.html @@ -36,6 +36,9 @@ add "&raw" to the end of the URL within a browser. +
diff --git a/graphene_django/views.py b/graphene_django/views.py index b29aeed..d4d98b7 100644 --- a/graphene_django/views.py +++ b/graphene_django/views.py @@ -76,6 +76,9 @@ class GraphQLView(View): "sha256-EZhvg6ANJrBsgLvLAa0uuHNLepLJVCFYS+xlb5U/bqw=" ) + graphiql_plugin_explorer_version = "0.1.15" + graphiql_plugin_explorer_sri = "sha256-3hUuhBXdXlfCj6RTeEkJFtEh/kUG+TCDASFpFPLrzvE=" + schema = None graphiql = False middleware = None @@ -158,6 +161,8 @@ class GraphQLView(View): graphiql_css_sri=self.graphiql_css_sri, subscriptions_transport_ws_version=self.subscriptions_transport_ws_version, subscriptions_transport_ws_sri=self.subscriptions_transport_ws_sri, + graphiql_plugin_explorer_version=self.graphiql_plugin_explorer_version, + graphiql_plugin_explorer_sri=self.graphiql_plugin_explorer_sri, # The SUBSCRIPTION_PATH setting. subscription_path=self.subscription_path, # GraphiQL headers tab,