Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-graphene for openSUSE:Factory 
checked in at 2022-08-10 17:14:48
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-graphene (Old)
 and      /work/SRC/openSUSE:Factory/.python-graphene.new.1521 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-graphene"

Wed Aug 10 17:14:48 2022 rev:6 rq:994268 version:3.1.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-graphene/python-graphene.changes  
2022-03-21 20:13:28.120526207 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-graphene.new.1521/python-graphene.changes    
    2022-08-10 17:15:55.878120074 +0200
@@ -1,0 +2,10 @@
+Wed Aug 10 07:54:15 UTC 2022 - Mark??ta Machov?? <mmach...@suse.com>
+
+- Update to version 3.1.0
+  * Refactor Multi Expression Code
+  * Add Python 3.9 and 3.10 to the test matrix
+  * fix: default value for argument should be Undefined (Issue #1394)
+  * fix: add default param _variables to parse_literal #1419
+  * Make Graphene compatible with GraphQL-Core 3.2
+
+-------------------------------------------------------------------

Old:
----
  graphene-3.0.0.tar.gz

New:
----
  graphene-3.1.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-graphene.spec ++++++
--- /var/tmp/diff_new_pack.e1D2PV/_old  2022-08-10 17:15:56.530121776 +0200
+++ /var/tmp/diff_new_pack.e1D2PV/_new  2022-08-10 17:15:56.534121787 +0200
@@ -19,7 +19,7 @@
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 %define skip_python2 1
 Name:           python-graphene
-Version:        3.0.0
+Version:        3.1.0
 Release:        0
 Summary:        GraphQL Framework for Python
 License:        MIT
@@ -27,8 +27,8 @@
 URL:            https://github.com/graphql-python/graphene
 Source:         
https://github.com/graphql-python/graphene/archive/v%{version}.tar.gz#/graphene-%{version}.tar.gz
 BuildRequires:  %{python_module aniso8601 >= 8}
-BuildRequires:  %{python_module graphql-core >= 3.1.2}
-BuildRequires:  %{python_module graphql-relay >= 3.0}
+BuildRequires:  %{python_module graphql-core >= 3.1}
+BuildRequires:  %{python_module graphql-relay >= 3.1}
 BuildRequires:  %{python_module promise}
 BuildRequires:  %{python_module pytest-asyncio}
 BuildRequires:  %{python_module pytest-benchmark}
@@ -40,8 +40,8 @@
 BuildRequires:  fdupes
 BuildRequires:  python-rpm-macros
 Requires:       python-aniso8601 >= 8
-Requires:       python-graphql-core >= 3.1.2
-Requires:       python-graphql-relay >= 3.0
+Requires:       python-graphql-core >= 3.1
+Requires:       python-graphql-relay >= 3.1
 Requires:       python-six
 BuildArch:      noarch
 %python_subpackages
@@ -61,12 +61,8 @@
 
 %check
 # The example depend on snapshottest, which is a bit messy to package as of 
v0.5.1
-# https://github.com/syrusakbary/snapshottest/pull/114
-
-# test_objecttype_as_container_extra_args and 
test_objecttype_as_container_invalid_kwargs
-# have slightly different output on Python 3.10, that the tests do not expect
-# https://github.com/graphql-python/graphene/issues/1400
-%pytest --ignore examples -k 'not (test_objecttype_as_container_extra_args or 
test_objecttype_as_container_invalid_kwargs)'
+# https://github.com/syrusakbary/snapshottest/issues/92
+%pytest --ignore examples
 
 %files %{python_files}
 %doc README.rst

++++++ graphene-3.0.0.tar.gz -> graphene-3.1.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/graphene-3.0.0/.github/workflows/deploy.yml 
new/graphene-3.1.0/.github/workflows/deploy.yml
--- old/graphene-3.0.0/.github/workflows/deploy.yml     2021-11-13 
23:15:18.000000000 +0100
+++ new/graphene-3.1.0/.github/workflows/deploy.yml     2022-05-30 
14:57:16.000000000 +0200
@@ -11,10 +11,10 @@
 
     steps:
     - uses: actions/checkout@v2
-    - name: Set up Python 3.8
+    - name: Set up Python 3.9
       uses: actions/setup-python@v2
       with:
-        python-version: 3.8
+        python-version: 3.9
     - name: Build wheel and source tarball
       run: |
         pip install wheel
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/graphene-3.0.0/.github/workflows/lint.yml 
new/graphene-3.1.0/.github/workflows/lint.yml
--- old/graphene-3.0.0/.github/workflows/lint.yml       2021-11-13 
23:15:18.000000000 +0100
+++ new/graphene-3.1.0/.github/workflows/lint.yml       2022-05-30 
14:57:16.000000000 +0200
@@ -8,10 +8,10 @@
 
     steps:
     - uses: actions/checkout@v2
-    - name: Set up Python 3.8
+    - name: Set up Python 3.9
       uses: actions/setup-python@v2
       with:
-        python-version: 3.8
+        python-version: 3.9
     - name: Install dependencies
       run: |
         python -m pip install --upgrade pip
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/graphene-3.0.0/.github/workflows/tests.yml 
new/graphene-3.1.0/.github/workflows/tests.yml
--- old/graphene-3.0.0/.github/workflows/tests.yml      2021-11-13 
23:15:18.000000000 +0100
+++ new/graphene-3.1.0/.github/workflows/tests.yml      2022-05-30 
14:57:16.000000000 +0200
@@ -25,6 +25,8 @@
       fail-fast: false
       matrix:
         include:
+          - {name: '3.10', python: '3.10', os: ubuntu-latest, tox: py310}
+          - {name: '3.9', python: '3.9', os: ubuntu-latest, tox: py39}
           - {name: '3.8', python: '3.8', os: ubuntu-latest, tox: py38}
           - {name: '3.7', python: '3.7', os: ubuntu-latest, tox: py37}
           - {name: '3.6', python: '3.6', os: ubuntu-latest, tox: py36}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/graphene-3.0.0/.pre-commit-config.yaml 
new/graphene-3.1.0/.pre-commit-config.yaml
--- old/graphene-3.0.0/.pre-commit-config.yaml  2021-11-13 23:15:18.000000000 
+0100
+++ new/graphene-3.1.0/.pre-commit-config.yaml  2022-05-30 14:57:16.000000000 
+0200
@@ -1,9 +1,9 @@
 default_language_version:
-  python: python3.8
+  python: python3.9
 
 repos:
--   repo: git://github.com/pre-commit/pre-commit-hooks
-    rev: v2.3.0
+-   repo: https://github.com/pre-commit/pre-commit-hooks
+    rev: v4.2.0
     hooks:
     -   id: check-merge-conflict
     -   id: check-json
@@ -16,15 +16,15 @@
         - --autofix
     -   id: trailing-whitespace
         exclude: README.md
--   repo: git://github.com/asottile/pyupgrade
-    rev: v2.24.0
+-   repo: https://github.com/asottile/pyupgrade
+    rev: v2.32.1
     hooks:
     -   id: pyupgrade
--   repo: git://github.com/ambv/black
-    rev: 19.3b0
+-   repo: https://github.com/ambv/black
+    rev: 22.3.0
     hooks:
     -   id: black
--   repo: git://github.com/PyCQA/flake8
-    rev: 3.8.4
+-   repo: https://github.com/PyCQA/flake8
+    rev: 4.0.1
     hooks:
     -   id: flake8
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/graphene-3.0.0/README.rst 
new/graphene-3.1.0/README.rst
--- old/graphene-3.0.0/README.rst       2021-11-13 23:15:18.000000000 +0100
+++ new/graphene-3.1.0/README.rst       2022-05-30 14:57:16.000000000 +0200
@@ -1,18 +1,18 @@
-**We are looking for contributors**! Please check the
-`ROADMAP <https://github.com/graphql-python/graphene/blob/master/ROADMAP.md>`__
-to see how you can help ??????
-
---------------
-
 |Graphene Logo| `Graphene <http://graphene-python.org>`__ |Build Status| |PyPI 
version| |Coverage Status|
 
=========================================================================================================
 
+`???? Join the community on
+Slack 
<https://join.slack.com/t/graphenetools/shared_invite/enQtOTE2MDQ1NTg4MDM1LTA4Nzk0MGU0NGEwNzUxZGNjNDQ4ZjAwNDJjMjY0OGE1ZDgxZTg4YjM2ZTc4MjE2ZTAzZjE2ZThhZTQzZTkyMmM>`__
+
+**We are looking for contributors**! Please check the
+`ROADMAP <https://github.com/graphql-python/graphene/blob/master/ROADMAP.md>`__
+to see how you can help ??????
 
 Introduction
 ------------
 
-`Graphene <http://graphene-python.org>`__ is a Python library for
-building GraphQL schemas/types fast and easily.
+`Graphene <http://graphene-python.org>`__ is an opinionated Python
+library for building GraphQL schemas/types fast and easily.
 
 -  **Easy to use:** Graphene helps you use GraphQL in Python without
    effort.
@@ -27,17 +27,18 @@
 
 Graphene has multiple integrations with different frameworks:
 
-+---------------------+----------------------------------------------------------------------------------------------+
-| integration         | Package                                                
                                      |
-+=====================+==============================================================================================+
-| Django              | `graphene-django 
<https://github.com/graphql-python/graphene-django/>`__                     |
-+---------------------+----------------------------------------------------------------------------------------------+
-| SQLAlchemy          | `graphene-sqlalchemy 
<https://github.com/graphql-python/graphene-sqlalchemy/>`__             |
-+---------------------+----------------------------------------------------------------------------------------------+
-| Google App Engine   | `graphene-gae 
<https://github.com/graphql-python/graphene-gae/>`__                           |
-+---------------------+----------------------------------------------------------------------------------------------+
-| Peewee              | *In progress* (`Tracking Issue 
<https://github.com/graphql-python/graphene/issues/289>`__)   |
-+---------------------+----------------------------------------------------------------------------------------------+
++-------------------+-------------------------------------------------+
+| integration       | Package                                         |
++===================+=================================================+
+| Django            | `graphene-django <https:/                       |
+|                   | /github.com/graphql-python/graphene-django/>`__ |
++-------------------+-------------------------------------------------+
+| SQLAlchemy        | `graphene-sqlalchemy <https://git               |
+|                   | hub.com/graphql-python/graphene-sqlalchemy/>`__ |
++-------------------+-------------------------------------------------+
+| Google App Engine | `graphene-gae <http                             |
+|                   | s://github.com/graphql-python/graphene-gae/>`__ |
++-------------------+-------------------------------------------------+
 
 Also, Graphene is fully compatible with the GraphQL spec, working
 seamlessly with all GraphQL clients, such as
@@ -52,13 +53,7 @@
 
 .. code:: bash
 
-    pip install "graphene>=2.0"
-
-2.0 Upgrade Guide
------------------
-
-Please read `UPGRADE-v2.0.md </UPGRADE-v2.0.md>`__ to learn how to
-upgrade.
+   pip install "graphene>=3.0"
 
 Examples
 --------
@@ -67,26 +62,26 @@
 
 .. code:: python
 
-    import graphene
+   import graphene
 
-    class Query(graphene.ObjectType):
-        hello = graphene.String(description='A typical hello world')
+   class Query(graphene.ObjectType):
+       hello = graphene.String(description='A typical hello world')
 
-        def resolve_hello(self, info):
-            return 'World'
+       def resolve_hello(self, info):
+           return 'World'
 
-    schema = graphene.Schema(query=Query)
+   schema = graphene.Schema(query=Query)
 
 Then Querying ``graphene.Schema`` is as simple as:
 
 .. code:: python
 
-    query = '''
-        query SayHello {
-          hello
-        }
-    '''
-    result = schema.execute(query)
+   query = '''
+       query SayHello {
+         hello
+       }
+   '''
+   result = schema.execute(query)
 
 If you want to learn even more, you can also check the following
 `examples <examples/>`__:
@@ -110,20 +105,20 @@
 
 .. code:: sh
 
-    virtualenv venv
-    source venv/bin/activate
-    pip install -e ".[test]"
+   virtualenv venv
+   source venv/bin/activate
+   pip install -e ".[test]"
 
 Well-written tests and maintaining good test coverage is important to
 this project. While developing, run new and existing tests with:
 
 .. code:: sh
 
-    py.test graphene/relay/tests/test_node.py # Single file
-    py.test graphene/relay # All tests in directory
+   py.test graphene/relay/tests/test_node.py # Single file
+   py.test graphene/relay # All tests in directory
 
 Add the ``-s`` flag if you have introduced breakpoints into the code for
-debugging. Add the ``-v`` ("verbose") flag to get more detailed test
+debugging. Add the ``-v`` (???verbose???) flag to get more detailed test
 output. For even more detailed output, use ``-vv``. Check out the
 `pytest documentation <https://docs.pytest.org/en/latest/>`__ for more
 options and test running controls.
@@ -132,7 +127,7 @@
 
 .. code:: sh
 
-    py.test graphene --benchmark-only
+   py.test graphene --benchmark-only
 
 Graphene supports several versions of Python. To make sure that changes
 do not break compatibility with any of those versions, we use ``tox`` to
@@ -142,14 +137,14 @@
 
 .. code:: sh
 
-    tox
+   tox
 
 If you wish to run against a specific version defined in the ``tox.ini``
 file:
 
 .. code:: sh
 
-    tox -e py36
+   tox -e py36
 
 Tox can only use whatever versions of Python are installed on your
 system. When you create a pull request, Travis will also be running the
@@ -168,7 +163,7 @@
 
 .. code:: sh
 
-    make docs
+   make docs
 
 .. |Graphene Logo| image:: http://graphene-python.org/favicon.png
 .. |Build Status| image:: 
https://travis-ci.org/graphql-python/graphene.svg?branch=master
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/graphene-3.0.0/UPGRADE-v2.0.md 
new/graphene-3.1.0/UPGRADE-v2.0.md
--- old/graphene-3.0.0/UPGRADE-v2.0.md  2021-11-13 23:15:18.000000000 +0100
+++ new/graphene-3.1.0/UPGRADE-v2.0.md  2022-05-30 14:57:16.000000000 +0200
@@ -123,7 +123,7 @@
     return ...
 ```
 
-**PS.: Take care with receiving args like `my_arg` as above. This doesn't work 
for optional (non-required) arguments as stantard `Connection`'s arguments 
(first, before, after, before).**
+**PS.: Take care with receiving args like `my_arg` as above. This doesn't work 
for optional (non-required) arguments as stantard `Connection`'s arguments 
(first, last, after, before).**
 You may need something like this:
 
 ```python
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/graphene-3.0.0/docs/conf.py 
new/graphene-3.1.0/docs/conf.py
--- old/graphene-3.0.0/docs/conf.py     2021-11-13 23:15:18.000000000 +0100
+++ new/graphene-3.1.0/docs/conf.py     2022-05-30 14:57:16.000000000 +0200
@@ -64,18 +64,18 @@
 master_doc = "index"
 
 # General information about the project.
-project = u"Graphene"
-copyright = u"Graphene 2016"
-author = u"Syrus Akbary"
+project = "Graphene"
+copyright = "Graphene 2016"
+author = "Syrus Akbary"
 
 # The version info for the project you're documenting, acts as replacement for
 # |version| and |release|, also used in various other places throughout the
 # built documents.
 #
 # The short X.Y version.
-version = u"1.0"
+version = "1.0"
 # The full version, including alpha/beta/rc tags.
-release = u"1.0"
+release = "1.0"
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
@@ -278,7 +278,7 @@
 # (source start file, target name, title,
 #  author, documentclass [howto, manual, or own class]).
 latex_documents = [
-    (master_doc, "Graphene.tex", u"Graphene Documentation", u"Syrus Akbary", 
"manual")
+    (master_doc, "Graphene.tex", "Graphene Documentation", "Syrus Akbary", 
"manual")
 ]
 
 # The name of an image file (relative to this directory) to place at the top of
@@ -318,7 +318,7 @@
 
 # One entry per manual page. List of tuples
 # (source start file, name, description, authors, manual section).
-man_pages = [(master_doc, "graphene", u"Graphene Documentation", [author], 1)]
+man_pages = [(master_doc, "graphene", "Graphene Documentation", [author], 1)]
 
 # If true, show URL addresses after external links.
 #
@@ -334,7 +334,7 @@
     (
         master_doc,
         "Graphene",
-        u"Graphene Documentation",
+        "Graphene Documentation",
         author,
         "Graphene",
         "One line description of project.",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/graphene-3.0.0/docs/execution/dataloader.rst 
new/graphene-3.1.0/docs/execution/dataloader.rst
--- old/graphene-3.0.0/docs/execution/dataloader.rst    2021-11-13 
23:15:18.000000000 +0100
+++ new/graphene-3.1.0/docs/execution/dataloader.rst    2022-05-30 
14:57:16.000000000 +0200
@@ -28,10 +28,9 @@
 A batch loading function accepts a list of keys, and returns a ``Promise``
 which resolves to a list of ``values``.
 
-Then load individual values from the loader. ``DataLoader`` will coalesce all
-individual loads which occur within a single frame of execution (executed once
-the wrapping promise is resolved) and then call your batch function with all
-requested keys.
+``DataLoader`` will coalesce all individual loads which occur within a
+single frame of execution (executed once the wrapping promise is resolved)
+and then call your batch function with all requested keys.
 
 
 .. code:: python
@@ -96,7 +95,7 @@
     }
 
 
-Naively, if ``me``, ``bestFriend`` and ``friends`` each need to request the 
backend,
+If ``me``, ``bestFriend`` and ``friends`` each need to send a request to the 
backend,
 there could be at most 13 database requests!
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/graphene-3.0.0/docs/execution/middleware.rst 
new/graphene-3.1.0/docs/execution/middleware.rst
--- old/graphene-3.0.0/docs/execution/middleware.rst    2021-11-13 
23:15:18.000000000 +0100
+++ new/graphene-3.1.0/docs/execution/middleware.rst    2022-05-30 
14:57:16.000000000 +0200
@@ -46,7 +46,7 @@
 ------------------
 
 Middleware can also be defined as a function. Here we define a middleware that
-logs the time it takes to resolve each field
+logs the time it takes to resolve each field:
 
 .. code:: python
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/graphene-3.0.0/docs/types/interfaces.rst 
new/graphene-3.1.0/docs/types/interfaces.rst
--- old/graphene-3.0.0/docs/types/interfaces.rst        2021-11-13 
23:15:18.000000000 +0100
+++ new/graphene-3.1.0/docs/types/interfaces.rst        2022-05-30 
14:57:16.000000000 +0200
@@ -44,7 +44,7 @@
 but also bring in extra fields, ``home_planet``, ``starships`` and
 ``primary_function``, that are specific to that particular type of character.
 
-The full GraphQL schema defition will look like this:
+The full GraphQL schema definition will look like this:
 
 .. code::
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/graphene-3.0.0/docs/types/mutations.rst 
new/graphene-3.1.0/docs/types/mutations.rst
--- old/graphene-3.0.0/docs/types/mutations.rst 2021-11-13 23:15:18.000000000 
+0100
+++ new/graphene-3.1.0/docs/types/mutations.rst 2022-05-30 14:57:16.000000000 
+0200
@@ -85,9 +85,9 @@
 
 InputFields and InputObjectTypes
 ----------------------------------
-InputFields are used in mutations to allow nested input data for mutations
+InputFields are used in mutations to allow nested input data for mutations.
 
-To use an InputField you define an InputObjectType that specifies the 
structure of your input data
+To use an InputField you define an InputObjectType that specifies the 
structure of your input data:
 
 
 .. code:: python
@@ -112,7 +112,7 @@
             return CreatePerson(person=person)
 
 
-Note that  **name** and **age** are part of **person_data** now
+Note that  **name** and **age** are part of **person_data** now.
 
 Using the above mutation your new query would look like this:
 
@@ -128,7 +128,7 @@
     }
 
 InputObjectTypes can also be fields of InputObjectTypes allowing you to have
-as complex of input data as you need
+as complex of input data as you need:
 
 .. code:: python
 
@@ -160,7 +160,7 @@
         def mutate(root, info, name):
             return Person(name=name)
 
-Then, if we query (``schema.execute(query_str)``) the following:
+Then, if we query (``schema.execute(query_str)``) with the following:
 
 .. code::
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/graphene-3.0.0/docs/types/schema.rst 
new/graphene-3.1.0/docs/types/schema.rst
--- old/graphene-3.0.0/docs/types/schema.rst    2021-11-13 23:15:18.000000000 
+0100
+++ new/graphene-3.1.0/docs/types/schema.rst    2022-05-30 14:57:16.000000000 
+0200
@@ -44,7 +44,7 @@
 For example, when a field returns an ``Interface``, the schema doesn't know 
about any of the
 implementations.
 
-In this case, we need to use the ``types`` argument when creating the Schema.
+In this case, we need to use the ``types`` argument when creating the Schema:
 
 
 .. code:: python
@@ -63,7 +63,7 @@
 explicitly set with the ``name`` arg) will be converted from
 ``snake_case`` to ``camelCase`` (as the API is usually being consumed by a 
js/mobile client)
 
-For example with the ObjectType
+For example with the ObjectType the ``last_name`` field name is converted to 
``lastName``:
 
 .. code:: python
 
@@ -71,12 +71,10 @@
         last_name = graphene.String()
         other_name = graphene.String(name='_other_Name')
 
-the ``last_name`` field name is converted to ``lastName``.
-
 In case you don't want to apply this transformation, provide a ``name`` 
argument to the field constructor.
 ``other_name`` converts to ``_other_Name`` (without further transformations).
 
-Your query should look like
+Your query should look like:
 
 .. code::
 
@@ -86,7 +84,7 @@
     }
 
 
-To disable this behavior, set the ``auto_camelcase`` to ``False`` upon schema 
instantiation.
+To disable this behavior, set the ``auto_camelcase`` to ``False`` upon schema 
instantiation:
 
 .. code:: python
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/graphene-3.0.0/docs/types/unions.rst 
new/graphene-3.1.0/docs/types/unions.rst
--- old/graphene-3.0.0/docs/types/unions.rst    2021-11-13 23:15:18.000000000 
+0100
+++ new/graphene-3.1.0/docs/types/unions.rst    2022-05-30 14:57:16.000000000 
+0200
@@ -7,7 +7,7 @@
 The basics:
 
 - Each Union is a Python class that inherits from ``graphene.Union``.
-- Unions don't have any fields on it, just links to the possible objecttypes.
+- Unions don't have any fields on it, just links to the possible ObjectTypes.
 
 Quick example
 -------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/graphene-3.0.0/examples/starwars_relay/tests/snapshots/snap_test_objectidentification.py
 
new/graphene-3.1.0/examples/starwars_relay/tests/snapshots/snap_test_objectidentification.py
--- 
old/graphene-3.0.0/examples/starwars_relay/tests/snapshots/snap_test_objectidentification.py
        2021-11-13 23:15:18.000000000 +0100
+++ 
new/graphene-3.1.0/examples/starwars_relay/tests/snapshots/snap_test_objectidentification.py
        2022-05-30 14:57:16.000000000 +0200
@@ -49,7 +49,7 @@
   name: String
 
   """The ships used by the faction."""
-  ships(before: String = null, after: String = null, first: Int = null, last: 
Int = null): ShipConnection
+  ships(before: String, after: String, first: Int, last: Int): ShipConnection
 }
 
 """An object with an ID"""
@@ -115,5 +115,4 @@
   shipName: String!
   factionId: String!
   clientMutationId: String
-}
-'''
+}'''
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/graphene-3.0.0/examples/starwars_relay/tests/test_objectidentification.py 
new/graphene-3.1.0/examples/starwars_relay/tests/test_objectidentification.py
--- 
old/graphene-3.0.0/examples/starwars_relay/tests/test_objectidentification.py   
    2021-11-13 23:15:18.000000000 +0100
+++ 
new/graphene-3.1.0/examples/starwars_relay/tests/test_objectidentification.py   
    2022-05-30 14:57:16.000000000 +0200
@@ -9,7 +9,7 @@
 
 
 def test_str_schema(snapshot):
-    snapshot.assert_match(str(schema))
+    snapshot.assert_match(str(schema).strip())
 
 
 def test_correctly_fetches_id_name_rebels(snapshot):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/graphene-3.0.0/graphene/__init__.py 
new/graphene-3.1.0/graphene/__init__.py
--- old/graphene-3.0.0/graphene/__init__.py     2021-11-13 23:15:18.000000000 
+0100
+++ new/graphene-3.1.0/graphene/__init__.py     2022-05-30 14:57:16.000000000 
+0200
@@ -41,7 +41,7 @@
 from .utils.module_loading import lazy_import
 from .utils.resolve_only_args import resolve_only_args
 
-VERSION = (3, 0, 0, "final", 0)
+VERSION = (3, 1, 0, "final", 0)
 
 
 __version__ = get_version(VERSION)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/graphene-3.0.0/graphene/pyutils/version.py 
new/graphene-3.1.0/graphene/pyutils/version.py
--- old/graphene-3.0.0/graphene/pyutils/version.py      2021-11-13 
23:15:18.000000000 +0100
+++ new/graphene-3.1.0/graphene/pyutils/version.py      2022-05-30 
14:57:16.000000000 +0200
@@ -19,10 +19,7 @@
     sub = ""
     if version[3] == "alpha" and version[4] == 0:
         git_changeset = get_git_changeset()
-        if git_changeset:
-            sub = ".dev%s" % git_changeset
-        else:
-            sub = ".dev"
+        sub = ".dev%s" % git_changeset if git_changeset else ".dev"
     elif version[3] != "final":
         mapping = {"alpha": "a", "beta": "b", "rc": "rc"}
         sub = mapping[version[3]] + str(version[4])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/graphene-3.0.0/graphene/relay/node.py 
new/graphene-3.1.0/graphene/relay/node.py
--- old/graphene-3.0.0/graphene/relay/node.py   2021-11-13 23:15:18.000000000 
+0100
+++ new/graphene-3.1.0/graphene/relay/node.py   2022-05-30 14:57:16.000000000 
+0200
@@ -18,11 +18,7 @@
     if not issubclass(objecttype, ObjectType):
         return False
 
-    for i in objecttype._meta.interfaces:
-        if issubclass(i, Node):
-            return True
-
-    return False
+    return any(issubclass(i, Node) for i in objecttype._meta.interfaces)
 
 
 class GlobalID(Field):
@@ -90,11 +86,13 @@
     def get_node_from_global_id(cls, info, global_id, only_type=None):
         try:
             _type, _id = cls.from_global_id(global_id)
+            if not _type:
+                raise ValueError("Invalid Global ID")
         except Exception as e:
             raise Exception(
                 f'Unable to parse global ID "{global_id}". '
                 'Make sure it is a base64 encoded string in the format: 
"TypeName:id". '
-                f"Exception message: {str(e)}"
+                f"Exception message: {e}"
             )
 
         graphene_type = info.schema.get_type(_type)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/graphene-3.0.0/graphene/relay/tests/test_node.py 
new/graphene-3.1.0/graphene/relay/tests/test_node.py
--- old/graphene-3.0.0/graphene/relay/tests/test_node.py        2021-11-13 
23:15:18.000000000 +0100
+++ new/graphene-3.1.0/graphene/relay/tests/test_node.py        2022-05-30 
14:57:16.000000000 +0200
@@ -1,7 +1,7 @@
 import re
-from graphql_relay import to_global_id
+from textwrap import dedent
 
-from graphene.tests.utils import dedent
+from graphql_relay import to_global_id
 
 from ...types import ObjectType, Schema, String
 from ..node import Node, is_node
@@ -171,8 +171,10 @@
 
 
 def test_str_schema():
-    assert str(schema) == dedent(
-        '''
+    assert (
+        str(schema).strip()
+        == dedent(
+            '''
         schema {
           query: RootQuery
         }
@@ -213,4 +215,5 @@
           ): MyNode
         }
         '''
+        ).strip()
     )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/graphene-3.0.0/graphene/relay/tests/test_node_custom.py 
new/graphene-3.1.0/graphene/relay/tests/test_node_custom.py
--- old/graphene-3.0.0/graphene/relay/tests/test_node_custom.py 2021-11-13 
23:15:18.000000000 +0100
+++ new/graphene-3.1.0/graphene/relay/tests/test_node_custom.py 2022-05-30 
14:57:16.000000000 +0200
@@ -1,6 +1,6 @@
-from graphql import graphql_sync
+from textwrap import dedent
 
-from graphene.tests.utils import dedent
+from graphql import graphql_sync
 
 from ...types import Interface, ObjectType, Schema
 from ...types.scalars import Int, String
@@ -54,8 +54,10 @@
 
 
 def test_str_schema_correct():
-    assert str(schema) == dedent(
-        '''
+    assert (
+        str(schema).strip()
+        == dedent(
+            '''
         schema {
           query: RootQuery
         }
@@ -93,6 +95,7 @@
           ): Node
         }
         '''
+        ).strip()
     )
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/graphene-3.0.0/graphene/test/__init__.py 
new/graphene-3.1.0/graphene/test/__init__.py
--- old/graphene-3.0.0/graphene/test/__init__.py        2021-11-13 
23:15:18.000000000 +0100
+++ new/graphene-3.1.0/graphene/test/__init__.py        2022-05-30 
14:57:16.000000000 +0200
@@ -1,5 +1,4 @@
 from promise import Promise, is_thenable
-from graphql.error import format_error as format_graphql_error
 from graphql.error import GraphQLError
 
 from graphene.types.schema import Schema
@@ -7,7 +6,7 @@
 
 def default_format_error(error):
     if isinstance(error, GraphQLError):
-        return format_graphql_error(error)
+        return error.formatted
     return {"message": str(error)}
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/graphene-3.0.0/graphene/tests/issues/test_1394.py 
new/graphene-3.1.0/graphene/tests/issues/test_1394.py
--- old/graphene-3.0.0/graphene/tests/issues/test_1394.py       1970-01-01 
01:00:00.000000000 +0100
+++ new/graphene-3.1.0/graphene/tests/issues/test_1394.py       2022-05-30 
14:57:16.000000000 +0200
@@ -0,0 +1,36 @@
+from ...types import ObjectType, Schema, String, NonNull
+
+
+class Query(ObjectType):
+    hello = String(input=NonNull(String))
+
+    def resolve_hello(self, info, input):
+        if input == "nothing":
+            return None
+        return f"Hello {input}!"
+
+
+schema = Schema(query=Query)
+
+
+def test_required_input_provided():
+    """
+    Test that a required argument works when provided.
+    """
+    input_value = "Potato"
+    result = schema.execute('{ hello(input: "%s") }' % input_value)
+    assert not result.errors
+    assert result.data == {"hello": "Hello Potato!"}
+
+
+def test_required_input_missing():
+    """
+    Test that a required argument raised an error if not provided.
+    """
+    result = schema.execute("{ hello }")
+    assert result.errors
+    assert len(result.errors) == 1
+    assert (
+        result.errors[0].message
+        == "Field 'hello' argument 'input' of type 'String!' is required, but 
it was not provided."
+    )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/graphene-3.0.0/graphene/tests/issues/test_1419.py 
new/graphene-3.1.0/graphene/tests/issues/test_1419.py
--- old/graphene-3.0.0/graphene/tests/issues/test_1419.py       1970-01-01 
01:00:00.000000000 +0100
+++ new/graphene-3.1.0/graphene/tests/issues/test_1419.py       2022-05-30 
14:57:16.000000000 +0200
@@ -0,0 +1,53 @@
+import pytest
+
+from ...types.base64 import Base64
+from ...types.datetime import Date, DateTime
+from ...types.decimal import Decimal
+from ...types.generic import GenericScalar
+from ...types.json import JSONString
+from ...types.objecttype import ObjectType
+from ...types.scalars import ID, BigInt, Boolean, Float, Int, String
+from ...types.schema import Schema
+from ...types.uuid import UUID
+
+
+@pytest.mark.parametrize(
+    "input_type,input_value",
+    [
+        (Date, '"2022-02-02"'),
+        (GenericScalar, '"foo"'),
+        (Int, "1"),
+        (BigInt, "12345678901234567890"),
+        (Float, "1.1"),
+        (String, '"foo"'),
+        (Boolean, "true"),
+        (ID, "1"),
+        (DateTime, '"2022-02-02T11:11:11"'),
+        (UUID, '"cbebbc62-758e-4f75-a890-bc73b5017d81"'),
+        (Decimal, "1.1"),
+        (JSONString, '{key:"foo",value:"bar"}'),
+        (Base64, '"Q2hlbG8gd29ycmxkCg=="'),
+    ],
+)
+def test_parse_literal_with_variables(input_type, input_value):
+    # input_b needs to be evaluated as literal while the variable dict for
+    # input_a is passed along.
+
+    class Query(ObjectType):
+        generic = GenericScalar(input_a=GenericScalar(), input_b=input_type())
+
+        def resolve_generic(self, info, input_a=None, input_b=None):
+            return input
+
+    schema = Schema(query=Query)
+
+    query = f"""
+        query Test($a: GenericScalar){{
+            generic(inputA: $a, inputB: {input_value})
+        }}
+    """
+    result = schema.execute(
+        query,
+        variables={"a": "bar"},
+    )
+    assert not result.errors
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/graphene-3.0.0/graphene/tests/utils.py 
new/graphene-3.1.0/graphene/tests/utils.py
--- old/graphene-3.0.0/graphene/tests/utils.py  2021-11-13 23:15:18.000000000 
+0100
+++ new/graphene-3.1.0/graphene/tests/utils.py  1970-01-01 01:00:00.000000000 
+0100
@@ -1,9 +0,0 @@
-from textwrap import dedent as _dedent
-
-
-def dedent(text: str) -> str:
-    """Fix indentation of given text by removing leading spaces and tabs.
-    Also removes leading newlines and trailing spaces and tabs, but keeps 
trailing
-    newlines.
-    """
-    return _dedent(text.lstrip("\n").rstrip(" \t"))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/graphene-3.0.0/graphene/types/argument.py 
new/graphene-3.1.0/graphene/types/argument.py
--- old/graphene-3.0.0/graphene/types/argument.py       2021-11-13 
23:15:18.000000000 +0100
+++ new/graphene-3.1.0/graphene/types/argument.py       2022-05-30 
14:57:16.000000000 +0200
@@ -1,4 +1,5 @@
 from itertools import chain
+from graphql import Undefined
 
 from .dynamic import Dynamic
 from .mountedtype import MountedType
@@ -41,7 +42,7 @@
     def __init__(
         self,
         type_,
-        default_value=None,
+        default_value=Undefined,
         description=None,
         name=None,
         required=False,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/graphene-3.0.0/graphene/types/base64.py 
new/graphene-3.1.0/graphene/types/base64.py
--- old/graphene-3.0.0/graphene/types/base64.py 2021-11-13 23:15:18.000000000 
+0100
+++ new/graphene-3.1.0/graphene/types/base64.py 2022-05-30 14:57:16.000000000 
+0200
@@ -22,7 +22,7 @@
         return b64encode(value).decode("utf-8")
 
     @classmethod
-    def parse_literal(cls, node):
+    def parse_literal(cls, node, _variables=None):
         if not isinstance(node, StringValueNode):
             raise GraphQLError(
                 f"Base64 cannot represent non-string value: {print_ast(node)}"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/graphene-3.0.0/graphene/types/decimal.py 
new/graphene-3.1.0/graphene/types/decimal.py
--- old/graphene-3.0.0/graphene/types/decimal.py        2021-11-13 
23:15:18.000000000 +0100
+++ new/graphene-3.1.0/graphene/types/decimal.py        2022-05-30 
14:57:16.000000000 +0200
@@ -22,7 +22,7 @@
         return str(dec)
 
     @classmethod
-    def parse_literal(cls, node):
+    def parse_literal(cls, node, _variables=None):
         if isinstance(node, (StringValueNode, IntValueNode)):
             return cls.parse_value(node.value)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/graphene-3.0.0/graphene/types/definitions.py 
new/graphene-3.1.0/graphene/types/definitions.py
--- old/graphene-3.0.0/graphene/types/definitions.py    2021-11-13 
23:15:18.000000000 +0100
+++ new/graphene-3.1.0/graphene/types/definitions.py    2022-05-30 
14:57:16.000000000 +0200
@@ -7,7 +7,6 @@
     GraphQLObjectType,
     GraphQLScalarType,
     GraphQLUnionType,
-    Undefined,
 )
 
 
@@ -50,7 +49,7 @@
                 try:
                     value = enum[value]
                 except KeyError:
-                    return Undefined
+                    pass
         return super(GrapheneEnumType, self).serialize(value)
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/graphene-3.0.0/graphene/types/generic.py 
new/graphene-3.1.0/graphene/types/generic.py
--- old/graphene-3.0.0/graphene/types/generic.py        2021-11-13 
23:15:18.000000000 +0100
+++ new/graphene-3.1.0/graphene/types/generic.py        2022-05-30 
14:57:16.000000000 +0200
@@ -29,7 +29,7 @@
     parse_value = identity
 
     @staticmethod
-    def parse_literal(ast):
+    def parse_literal(ast, _variables=None):
         if isinstance(ast, (StringValueNode, BooleanValueNode)):
             return ast.value
         elif isinstance(ast, IntValueNode):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/graphene-3.0.0/graphene/types/json.py 
new/graphene-3.1.0/graphene/types/json.py
--- old/graphene-3.0.0/graphene/types/json.py   2021-11-13 23:15:18.000000000 
+0100
+++ new/graphene-3.1.0/graphene/types/json.py   2022-05-30 14:57:16.000000000 
+0200
@@ -20,7 +20,7 @@
         return json.dumps(dt)
 
     @staticmethod
-    def parse_literal(node):
+    def parse_literal(node, _variables=None):
         if isinstance(node, StringValueNode):
             return json.loads(node.value)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/graphene-3.0.0/graphene/types/mutation.py 
new/graphene-3.1.0/graphene/types/mutation.py
--- old/graphene-3.0.0/graphene/types/mutation.py       2021-11-13 
23:15:18.000000000 +0100
+++ new/graphene-3.1.0/graphene/types/mutation.py       2022-05-30 
14:57:16.000000000 +0200
@@ -101,10 +101,7 @@
                         "Read more:"
                         " 
https://github.com/graphql-python/graphene/blob/v2.0.0/UPGRADE-v2.0.md#mutation-input";
                     )
-            if input_class:
-                arguments = props(input_class)
-            else:
-                arguments = {}
+            arguments = props(input_class) if input_class else {}
         if not resolver:
             mutate = getattr(cls, "mutate", None)
             assert mutate, "All mutations must define a mutate method in it"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/graphene-3.0.0/graphene/types/resolver.py 
new/graphene-3.1.0/graphene/types/resolver.py
--- old/graphene-3.0.0/graphene/types/resolver.py       2021-11-13 
23:15:18.000000000 +0100
+++ new/graphene-3.1.0/graphene/types/resolver.py       2022-05-30 
14:57:16.000000000 +0200
@@ -7,9 +7,7 @@
 
 
 def dict_or_attr_resolver(attname, default_value, root, info, **args):
-    resolver = attr_resolver
-    if isinstance(root, dict):
-        resolver = dict_resolver
+    resolver = dict_resolver if isinstance(root, dict) else attr_resolver
     return resolver(attname, default_value, root, info, **args)
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/graphene-3.0.0/graphene/types/scalars.py 
new/graphene-3.1.0/graphene/types/scalars.py
--- old/graphene-3.0.0/graphene/types/scalars.py        2021-11-13 
23:15:18.000000000 +0100
+++ new/graphene-3.1.0/graphene/types/scalars.py        2022-05-30 
14:57:16.000000000 +0200
@@ -75,7 +75,7 @@
     parse_value = coerce_int
 
     @staticmethod
-    def parse_literal(ast):
+    def parse_literal(ast, _variables=None):
         if isinstance(ast, IntValueNode):
             num = int(ast.value)
             if MIN_INT <= num <= MAX_INT:
@@ -104,7 +104,7 @@
     parse_value = coerce_int
 
     @staticmethod
-    def parse_literal(ast):
+    def parse_literal(ast, _variables=None):
         if isinstance(ast, IntValueNode):
             return int(ast.value)
 
@@ -128,7 +128,7 @@
     parse_value = coerce_float
 
     @staticmethod
-    def parse_literal(ast):
+    def parse_literal(ast, _variables=None):
         if isinstance(ast, (FloatValueNode, IntValueNode)):
             return float(ast.value)
 
@@ -143,14 +143,14 @@
     @staticmethod
     def coerce_string(value):
         if isinstance(value, bool):
-            return u"true" if value else u"false"
+            return "true" if value else "false"
         return str(value)
 
     serialize = coerce_string
     parse_value = coerce_string
 
     @staticmethod
-    def parse_literal(ast):
+    def parse_literal(ast, _variables=None):
         if isinstance(ast, StringValueNode):
             return ast.value
 
@@ -164,7 +164,7 @@
     parse_value = bool
 
     @staticmethod
-    def parse_literal(ast):
+    def parse_literal(ast, _variables=None):
         if isinstance(ast, BooleanValueNode):
             return ast.value
 
@@ -182,6 +182,6 @@
     parse_value = str
 
     @staticmethod
-    def parse_literal(ast):
+    def parse_literal(ast, _variables=None):
         if isinstance(ast, (StringValueNode, IntValueNode)):
             return ast.value
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/graphene-3.0.0/graphene/types/schema.py 
new/graphene-3.1.0/graphene/types/schema.py
--- old/graphene-3.0.0/graphene/types/schema.py 2021-11-13 23:15:18.000000000 
+0100
+++ new/graphene-3.1.0/graphene/types/schema.py 2022-05-30 14:57:16.000000000 
+0200
@@ -376,19 +376,11 @@
     def resolve_type(self, resolve_type_func, type_name, root, info, _type):
         type_ = resolve_type_func(root, info)
 
-        if not type_:
-            return_type = self[type_name]
-            return default_type_resolver(root, info, return_type)
-
         if inspect.isclass(type_) and issubclass(type_, ObjectType):
-            graphql_type = self.get(type_._meta.name)
-            assert graphql_type, f"Can't find type {type_._meta.name} in 
schema"
-            assert (
-                graphql_type.graphene_type == type_
-            ), f"The type {type_} does not match with the associated graphene 
type {graphql_type.graphene_type}."
-            return graphql_type
+            return type_._meta.name
 
-        return type_
+        return_type = self[type_name]
+        return default_type_resolver(root, info, return_type)
 
 
 class Schema:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/graphene-3.0.0/graphene/types/tests/test_enum.py 
new/graphene-3.1.0/graphene/types/tests/test_enum.py
--- old/graphene-3.0.0/graphene/types/tests/test_enum.py        2021-11-13 
23:15:18.000000000 +0100
+++ new/graphene-3.1.0/graphene/types/tests/test_enum.py        2022-05-30 
14:57:16.000000000 +0200
@@ -251,19 +251,22 @@
 
     schema = Schema(query=Query)
 
-    assert str(schema) == dedent(
-        '''\
-        type Query {
-          color: Color!
-        }
+    assert (
+        str(schema).strip()
+        == dedent(
+            '''
+            type Query {
+              color: Color!
+            }
 
-        """Primary colors"""
-        enum Color {
-          RED
-          YELLOW
-          BLUE
-        }
-    '''
+            """Primary colors"""
+            enum Color {
+              RED
+              YELLOW
+              BLUE
+            }
+            '''
+        ).strip()
     )
 
 
@@ -345,10 +348,7 @@
 
     results = schema.execute("query { color }")
     assert results.errors
-    assert (
-        results.errors[0].message
-        == "Expected a value of type 'Color' but received: 'BLACK'"
-    )
+    assert results.errors[0].message == "Enum 'Color' cannot represent value: 
'BLACK'"
 
 
 def test_field_enum_argument():
@@ -460,12 +460,13 @@
 
     schema = Schema(query=Query, mutation=MyMutation)
     result = schema.execute(
-        """ mutation MyMutation {
-        createPaint(colorInput: { color: RED }) {
-            color
+        """
+        mutation MyMutation {
+            createPaint(colorInput: { color: RED }) {
+                color
+            }
         }
-    }
-    """
+        """
     )
     assert not result.errors
     assert result.data == {"createPaint": {"color": "RED"}}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/graphene-3.0.0/graphene/types/tests/test_objecttype.py 
new/graphene-3.1.0/graphene/types/tests/test_objecttype.py
--- old/graphene-3.0.0/graphene/types/tests/test_objecttype.py  2021-11-13 
23:15:18.000000000 +0100
+++ new/graphene-3.1.0/graphene/types/tests/test_objecttype.py  2022-05-30 
14:57:16.000000000 +0200
@@ -191,21 +191,15 @@
 
 
 def test_objecttype_as_container_extra_args():
-    with raises(TypeError) as excinfo:
-        Container("1", "2", "3")
-
-    assert "__init__() takes from 1 to 3 positional arguments but 4 were 
given" == str(
-        excinfo.value
-    )
+    msg = r"__init__\(\) takes from 1 to 3 positional arguments but 4 were 
given"
+    with raises(TypeError, match=msg):
+        Container("1", "2", "3")  # type: ignore
 
 
 def test_objecttype_as_container_invalid_kwargs():
-    with raises(TypeError) as excinfo:
-        Container(unexisting_field="3")
-
-    assert "__init__() got an unexpected keyword argument 'unexisting_field'" 
== str(
-        excinfo.value
-    )
+    msg = r"__init__\(\) got an unexpected keyword argument 'unexisting_field'"
+    with raises(TypeError, match=msg):
+        Container(unexisting_field="3")  # type: ignore
 
 
 def test_objecttype_container_benchmark(benchmark):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/graphene-3.0.0/graphene/types/tests/test_query.py 
new/graphene-3.1.0/graphene/types/tests/test_query.py
--- old/graphene-3.0.0/graphene/types/tests/test_query.py       2021-11-13 
23:15:18.000000000 +0100
+++ new/graphene-3.1.0/graphene/types/tests/test_query.py       2022-05-30 
14:57:16.000000000 +0200
@@ -229,11 +229,11 @@
 
     result = test_schema.execute("{ test }", None)
     assert not result.errors
-    assert result.data == {"test": '[null,{"a_str":null,"a_int":null}]'}
+    assert result.data == {"test": "[null,{}]"}
 
     result = test_schema.execute('{ test(aStr: "String!") }', "Source!")
     assert not result.errors
-    assert result.data == {"test": 
'["Source!",{"a_str":"String!","a_int":null}]'}
+    assert result.data == {"test": '["Source!",{"a_str":"String!"}]'}
 
     result = test_schema.execute('{ test(aInt: -123, aStr: "String!") }', 
"Source!")
     assert not result.errors
@@ -258,7 +258,7 @@
 
     result = test_schema.execute("{ test }", None)
     assert not result.errors
-    assert result.data == {"test": '[null,{"a_input":null}]'}
+    assert result.data == {"test": "[null,{}]"}
 
     result = test_schema.execute('{ test(aInput: {aField: "String!"} ) }', 
"Source!")
     assert not result.errors
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/graphene-3.0.0/graphene/types/tests/test_scalar.py 
new/graphene-3.1.0/graphene/types/tests/test_scalar.py
--- old/graphene-3.0.0/graphene/types/tests/test_scalar.py      2021-11-13 
23:15:18.000000000 +0100
+++ new/graphene-3.1.0/graphene/types/tests/test_scalar.py      2022-05-30 
14:57:16.000000000 +0200
@@ -11,19 +11,19 @@
 
 
 def test_ints():
-    assert Int.parse_value(2 ** 31 - 1) is not None
+    assert Int.parse_value(2**31 - 1) is not None
     assert Int.parse_value("2.0") is not None
-    assert Int.parse_value(2 ** 31) is None
+    assert Int.parse_value(2**31) is None
 
-    assert Int.parse_literal(IntValueNode(value=str(2 ** 31 - 1))) == 2 ** 31 
- 1
-    assert Int.parse_literal(IntValueNode(value=str(2 ** 31))) is None
+    assert Int.parse_literal(IntValueNode(value=str(2**31 - 1))) == 2**31 - 1
+    assert Int.parse_literal(IntValueNode(value=str(2**31))) is None
 
-    assert Int.parse_value(-(2 ** 31)) is not None
-    assert Int.parse_value(-(2 ** 31) - 1) is None
+    assert Int.parse_value(-(2**31)) is not None
+    assert Int.parse_value(-(2**31) - 1) is None
 
-    assert BigInt.parse_value(2 ** 31) is not None
+    assert BigInt.parse_value(2**31) is not None
     assert BigInt.parse_value("2.0") is not None
-    assert BigInt.parse_value(-(2 ** 31) - 1) is not None
+    assert BigInt.parse_value(-(2**31) - 1) is not None
 
-    assert BigInt.parse_literal(IntValueNode(value=str(2 ** 31 - 1))) == 2 ** 
31 - 1
-    assert BigInt.parse_literal(IntValueNode(value=str(2 ** 31))) == 2 ** 31
+    assert BigInt.parse_literal(IntValueNode(value=str(2**31 - 1))) == 2**31 - 
1
+    assert BigInt.parse_literal(IntValueNode(value=str(2**31))) == 2**31
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/graphene-3.0.0/graphene/types/tests/test_scalars_serialization.py 
new/graphene-3.1.0/graphene/types/tests/test_scalars_serialization.py
--- old/graphene-3.0.0/graphene/types/tests/test_scalars_serialization.py       
2021-11-13 23:15:18.000000000 +0100
+++ new/graphene-3.1.0/graphene/types/tests/test_scalars_serialization.py       
2022-05-30 14:57:16.000000000 +0200
@@ -38,7 +38,7 @@
     assert String.serialize(-1.1) == "-1.1"
     assert String.serialize(True) == "true"
     assert String.serialize(False) == "false"
-    assert String.serialize(u"\U0001F601") == u"\U0001F601"
+    assert String.serialize("\U0001F601") == "\U0001F601"
 
 
 def test_serializes_output_boolean():
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/graphene-3.0.0/graphene/types/tests/test_schema.py 
new/graphene-3.1.0/graphene/types/tests/test_schema.py
--- old/graphene-3.0.0/graphene/types/tests/test_schema.py      2021-11-13 
23:15:18.000000000 +0100
+++ new/graphene-3.1.0/graphene/types/tests/test_schema.py      2022-05-30 
14:57:16.000000000 +0200
@@ -1,7 +1,8 @@
-from graphql.type import GraphQLObjectType, GraphQLSchema
+from textwrap import dedent
+
 from pytest import raises
 
-from graphene.tests.utils import dedent
+from graphql.type import GraphQLObjectType, GraphQLSchema
 
 from ..field import Field
 from ..objecttype import ObjectType
@@ -43,8 +44,10 @@
 
 def test_schema_str():
     schema = Schema(Query)
-    assert str(schema) == dedent(
-        """
+    assert (
+        str(schema).strip()
+        == dedent(
+            """
         type Query {
           inner: MyOtherType
         }
@@ -53,6 +56,7 @@
           field: String
         }
         """
+        ).strip()
     )
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/graphene-3.0.0/graphene/types/tests/test_subscribe_async.py 
new/graphene-3.1.0/graphene/types/tests/test_subscribe_async.py
--- old/graphene-3.0.0/graphene/types/tests/test_subscribe_async.py     
2021-11-13 23:15:18.000000000 +0100
+++ new/graphene-3.1.0/graphene/types/tests/test_subscribe_async.py     
2022-05-30 14:57:16.000000000 +0200
@@ -14,9 +14,7 @@
     count_to_ten = Field(Int)
 
     async def subscribe_count_to_ten(root, info):
-        count = 0
-        while count < 10:
-            count += 1
+        for count in range(1, 11):
             yield count
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/graphene-3.0.0/graphene/types/tests/test_type_map.py 
new/graphene-3.1.0/graphene/types/tests/test_type_map.py
--- old/graphene-3.0.0/graphene/types/tests/test_type_map.py    2021-11-13 
23:15:18.000000000 +0100
+++ new/graphene-3.1.0/graphene/types/tests/test_type_map.py    2022-05-30 
14:57:16.000000000 +0200
@@ -1,3 +1,4 @@
+from graphql import Undefined
 from graphql.type import (
     GraphQLArgument,
     GraphQLEnumType,
@@ -244,7 +245,9 @@
     foo_field = fields["fooBar"]
     assert isinstance(foo_field, GraphQLField)
     assert foo_field.args == {
-        "barFoo": GraphQLArgument(GraphQLString, default_value=None, 
out_name="bar_foo")
+        "barFoo": GraphQLArgument(
+            GraphQLString, default_value=Undefined, out_name="bar_foo"
+        )
     }
 
 
@@ -267,7 +270,7 @@
     assert isinstance(foo_field, GraphQLField)
     assert foo_field.args == {
         "bar_foo": GraphQLArgument(
-            GraphQLString, default_value=None, out_name="bar_foo"
+            GraphQLString, default_value=Undefined, out_name="bar_foo"
         )
     }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/graphene-3.0.0/graphene/types/uuid.py 
new/graphene-3.1.0/graphene/types/uuid.py
--- old/graphene-3.0.0/graphene/types/uuid.py   2021-11-13 23:15:18.000000000 
+0100
+++ new/graphene-3.1.0/graphene/types/uuid.py   2022-05-30 14:57:16.000000000 
+0200
@@ -21,7 +21,7 @@
         return str(uuid)
 
     @staticmethod
-    def parse_literal(node):
+    def parse_literal(node, _variables=None):
         if isinstance(node, StringValueNode):
             return _UUID(node.value)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/graphene-3.0.0/graphene/utils/module_loading.py 
new/graphene-3.1.0/graphene/utils/module_loading.py
--- old/graphene-3.0.0/graphene/utils/module_loading.py 2021-11-13 
23:15:18.000000000 +0100
+++ new/graphene-3.1.0/graphene/utils/module_loading.py 2022-05-30 
14:57:16.000000000 +0200
@@ -27,19 +27,18 @@
 
     if not dotted_attributes:
         return result
-    else:
-        attributes = dotted_attributes.split(".")
-        traveled_attributes = []
-        try:
-            for attribute in attributes:
-                traveled_attributes.append(attribute)
-                result = getattr(result, attribute)
-            return result
-        except AttributeError:
-            raise ImportError(
-                'Module "%s" does not define a "%s" attribute inside 
attribute/class "%s"'
-                % (module_path, ".".join(traveled_attributes), class_name)
-            )
+    attributes = dotted_attributes.split(".")
+    traveled_attributes = []
+    try:
+        for attribute in attributes:
+            traveled_attributes.append(attribute)
+            result = getattr(result, attribute)
+        return result
+    except AttributeError:
+        raise ImportError(
+            'Module "%s" does not define a "%s" attribute inside 
attribute/class "%s"'
+            % (module_path, ".".join(traveled_attributes), class_name)
+        )
 
 
 def lazy_import(dotted_path, dotted_attributes=None):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/graphene-3.0.0/graphene/utils/tests/test_deduplicator.py 
new/graphene-3.1.0/graphene/utils/tests/test_deduplicator.py
--- old/graphene-3.0.0/graphene/utils/tests/test_deduplicator.py        
2021-11-13 23:15:18.000000000 +0100
+++ new/graphene-3.1.0/graphene/utils/tests/test_deduplicator.py        
2022-05-30 14:57:16.000000000 +0200
@@ -94,6 +94,7 @@
     ],
     "movies": {
         "1198359": {
+            "id": "1198359",
             "name": "King Arthur: Legend of the Sword",
             "synopsis": (
                 "When the child Arthur's father is murdered, Vortigern, "
@@ -159,7 +160,7 @@
                 "date": "2017-05-19",
                 "movie": {
                     "__typename": "Movie",
-                    "id": "TW92aWU6Tm9uZQ==",
+                    "id": "TW92aWU6MTE5ODM1OQ==",
                     "name": "King Arthur: Legend of the Sword",
                     "synopsis": (
                         "When the child Arthur's father is murdered, 
Vortigern, "
@@ -172,7 +173,7 @@
                 "__typename": "Event",
                 "id": "RXZlbnQ6MjM0",
                 "date": "2017-05-20",
-                "movie": {"__typename": "Movie", "id": "TW92aWU6Tm9uZQ=="},
+                "movie": {"__typename": "Movie", "id": "TW92aWU6MTE5ODM1OQ=="},
             },
         ]
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/graphene-3.0.0/graphene/utils/tests/test_orderedtype.py 
new/graphene-3.1.0/graphene/utils/tests/test_orderedtype.py
--- old/graphene-3.0.0/graphene/utils/tests/test_orderedtype.py 2021-11-13 
23:15:18.000000000 +0100
+++ new/graphene-3.1.0/graphene/utils/tests/test_orderedtype.py 2022-05-30 
14:57:16.000000000 +0200
@@ -38,4 +38,4 @@
 
     assert one.__lt__(1) == NotImplemented
     assert one.__gt__(1) == NotImplemented
-    assert not one == 1
+    assert one != 1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/graphene-3.0.0/graphene/validation/tests/test_disable_introspection.py 
new/graphene-3.1.0/graphene/validation/tests/test_disable_introspection.py
--- old/graphene-3.0.0/graphene/validation/tests/test_disable_introspection.py  
2021-11-13 23:15:18.000000000 +0100
+++ new/graphene-3.1.0/graphene/validation/tests/test_disable_introspection.py  
2022-05-30 14:57:16.000000000 +0200
@@ -18,14 +18,12 @@
 def run_query(query: str):
     document = parse(query)
 
-    errors = validate(
+    return validate(
         schema=schema.graphql_schema,
         document_ast=document,
         rules=(DisableIntrospection,),
     )
 
-    return errors
-
 
 def test_disallows_introspection_queries():
     errors = run_query("{ __schema { queryType { name } } }")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/graphene-3.0.0/setup.py new/graphene-3.1.0/setup.py
--- old/graphene-3.0.0/setup.py 2021-11-13 23:15:18.000000000 +0100
+++ new/graphene-3.1.0/setup.py 2022-05-30 14:57:16.000000000 +0200
@@ -45,20 +45,20 @@
 
 
 tests_require = [
-    "pytest>=5.3,<6",
-    "pytest-benchmark>=3.2,<4",
-    "pytest-cov>=2.8,<3",
-    "pytest-mock>=2,<3",
-    "pytest-asyncio>=0.10,<2",
-    "snapshottest>=0.5,<1",
-    "coveralls>=1.11,<2",
+    "pytest>=6,<7",
+    "pytest-benchmark>=3.4,<4",
+    "pytest-cov>=3,<4",
+    "pytest-mock>=3,<4",
+    "pytest-asyncio>=0.16,<2",
+    "snapshottest>=0.6,<1",
+    "coveralls>=3.3,<4",
     "promise>=2.3,<3",
-    "mock>=4.0,<5",
-    "pytz==2021.1",
-    "iso8601>=0.1,<2",
+    "mock>=4,<5",
+    "pytz==2022.1",
+    "iso8601>=1,<2",
 ]
 
-dev_requires = ["black==19.10b0", "flake8>=3.7,<4"] + tests_require
+dev_requires = ["black==22.3.0", "flake8>=4,<5"] + tests_require
 
 setup(
     name="graphene",
@@ -78,12 +78,14 @@
         "Programming Language :: Python :: 3.6",
         "Programming Language :: Python :: 3.7",
         "Programming Language :: Python :: 3.8",
+        "Programming Language :: Python :: 3.9",
+        "Programming Language :: Python :: 3.10",
     ],
     keywords="api graphql protocol rest relay graphene",
     packages=find_packages(exclude=["examples*"]),
     install_requires=[
-        "graphql-core~=3.1.2",
-        "graphql-relay>=3.0,<4",
+        "graphql-core>=3.1,<3.3",
+        "graphql-relay>=3.1,<3.3",
         "aniso8601>=8,<10",
     ],
     tests_require=tests_require,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/graphene-3.0.0/tox.ini new/graphene-3.1.0/tox.ini
--- old/graphene-3.0.0/tox.ini  2021-11-13 23:15:18.000000000 +0100
+++ new/graphene-3.1.0/tox.ini  2022-05-30 14:57:16.000000000 +0200
@@ -1,5 +1,5 @@
 [tox]
-envlist = flake8,py36,py37,py38,pre-commit,mypy
+envlist = py3{6,7,8,9,10}, flake8, mypy, pre-commit
 skipsdist = true
 
 [testenv]
@@ -8,28 +8,28 @@
 setenv =
      PYTHONPATH = .:{envdir}
 commands =
-    py{36,37,38}: pytest --cov=graphene graphene examples {posargs}
+    py{36,37,38,39,310}: pytest --cov=graphene graphene examples {posargs}
 
 [testenv:pre-commit]
-basepython=python3.8
+basepython = python3.9
 deps =
-    pre-commit>=2,<3
+    pre-commit>=2.16,<3
 setenv =
     LC_CTYPE=en_US.UTF-8
 commands =
     pre-commit run --all-files --show-diff-on-failure
 
 [testenv:mypy]
-basepython=python3.8
+basepython = python3.9
 deps =
-    mypy>=0.761,<1
+    mypy>=0.950,<1
 commands =
     mypy graphene
 
 [testenv:flake8]
-basepython=python3.8
+basepython = python3.9
 deps =
-    flake8>=3.8,<4
+    flake8>=4,<5
 commands =
     pip install --pre -e .
     flake8 graphene

Reply via email to