Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

data_loader KeyError when using sqlalchemy 1.4.0b1 #39

Open
GeoffreyY opened this issue Nov 10, 2020 · 0 comments
Open

data_loader KeyError when using sqlalchemy 1.4.0b1 #39

GeoffreyY opened this issue Nov 10, 2020 · 0 comments

Comments

@GeoffreyY
Copy link

sqlalchemy 1.4.0b1 was released recently, in many ways attempting to serve as a potential migration point for a more dramatic series of API changes currently planned for release 2.0 of SQLAlchemy. The beta version can be installed by passing --pre flag when installing the library, such as:

py -m pip install --pre sqlalchemy

See issue #38 for my test case, with the following changes:

using sqlalchemy version 1.4.0b1 instead of version 1.3.20

My flask client

from flask import Flask
from flask_graphql import GraphQLView

app = Flask(__name__)
app.debug = True

app.add_url_rule(
    '/graphql',
    view_func=GraphQLView.as_view(
        'graphql',
        schema=schema,
        graphiql=True  # for having the GraphiQL interface
    )
)

@app.teardown_appcontext
def shutdown_session(exception=None):
    db_session.remove()

if __name__ == '__main__':
    # for this to work in jupyter notebook
    from werkzeug.serving import run_simple
    run_simple('localhost', 9000, app)

test query

query {
  allSongs {
    edges {
      node {
        name
        tags {
          edges {
            node {
              name
            }
          }
        }
      }
    }
  }
}

error in response

{
  "errors": [
    {
      "message": "items",
      "locations": [
        {
          "line": 6,
          "column": 9
        }
      ],
      "path": [
        "allSongs",
        "edges",
        0,
        "node",
        "tags"
      ]
    },
    {
      "message": "items",
      "locations": [
        {
          "line": 6,
          "column": 9
        }
      ],
      "path": [
        "allSongs",
        "edges",
        1,
        "node",
        "tags"
      ]
    },
    {
      "message": "items",
      "locations": [
        {
          "line": 6,
          "column": 9
        }
      ],
      "path": [
        "allSongs",
        "edges",
        2,
        "node",
        "tags"
      ]
    }
  ],
  "data": {
    "allSongs": {
      "edges": [
        {
          "node": {
            "name": "素晴らしい日々",
            "tags": null
          }
        },
        {
          "node": {
            "name": "水槽のフール",
            "tags": null
          }
        },
        {
          "node": {
            "name": "despacito",
            "tags": null
          }
        }
      ]
    }
  }
}

server side error

An error occurred while resolving field SongNode.tags
Traceback (most recent call last):
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\graphene_sqlalchemy_filter\connection_field.py", line 324, in _get_or_create_data_loader
    current_data_loader: ModelLoader = data_loaders[data_loader_key]
KeyError: ('allSongs', 'edges', 'node', 'tags')

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\sqlalchemy\sql\base.py", line 1104, in __getattr__
    return self._index[key]
KeyError: 'items'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\graphql\execution\executor.py", line 452, in resolve_or_error
    return executor.execute(resolve_fn, source, info, **args)
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\graphql\execution\executors\sync.py", line 16, in execute
    return fn(*args, **kwargs)
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\graphene_sqlalchemy_filter\connection_field.py", line 356, in connection_resolver
    data_loader: ModelLoader = cls._get_or_create_data_loader(
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\graphene_sqlalchemy_filter\connection_field.py", line 326, in _get_or_create_data_loader
    current_data_loader = ModelLoader(type(root), model, info, args)
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\graphene_sqlalchemy_filter\connection_field.py", line 137, in __init__
    self.parent_model_pks: 'Tuple[str, ...]' = self._get_model_pks(
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\graphene_sqlalchemy_filter\connection_field.py", line 197, in _get_model_pks
    for name, c in inspection.inspect(model).columns.items()
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\sqlalchemy\sql\base.py", line 1106, in __getattr__
    util.raise_(AttributeError(key), replace_context=err)
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\sqlalchemy\util\compat.py", line 180, in raise_
    raise exception
AttributeError: items
Traceback (most recent call last):
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\graphql\execution\executor.py", line 452, in resolve_or_error
    return executor.execute(resolve_fn, source, info, **args)
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\graphql\execution\executors\sync.py", line 16, in execute
    return fn(*args, **kwargs)
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\graphene_sqlalchemy_filter\connection_field.py", line 356, in connection_resolver
    data_loader: ModelLoader = cls._get_or_create_data_loader(
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\graphene_sqlalchemy_filter\connection_field.py", line 326, in _get_or_create_data_loader
    current_data_loader = ModelLoader(type(root), model, info, args)
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\graphene_sqlalchemy_filter\connection_field.py", line 137, in __init__
    self.parent_model_pks: 'Tuple[str, ...]' = self._get_model_pks(
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\graphene_sqlalchemy_filter\connection_field.py", line 197, in _get_model_pks
    for name, c in inspection.inspect(model).columns.items()
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\sqlalchemy\sql\base.py", line 1106, in __getattr__
    util.raise_(AttributeError(key), replace_context=err)
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\sqlalchemy\util\compat.py", line 180, in raise_
    raise exception
graphql.error.located_error.GraphQLLocatedError: items

An error occurred while resolving field SongNode.tags
Traceback (most recent call last):
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\graphene_sqlalchemy_filter\connection_field.py", line 324, in _get_or_create_data_loader
    current_data_loader: ModelLoader = data_loaders[data_loader_key]
KeyError: ('allSongs', 'edges', 'node', 'tags')

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\sqlalchemy\sql\base.py", line 1104, in __getattr__
    return self._index[key]
KeyError: 'items'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\graphql\execution\executor.py", line 452, in resolve_or_error
    return executor.execute(resolve_fn, source, info, **args)
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\graphql\execution\executors\sync.py", line 16, in execute
    return fn(*args, **kwargs)
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\graphene_sqlalchemy_filter\connection_field.py", line 356, in connection_resolver
    data_loader: ModelLoader = cls._get_or_create_data_loader(
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\graphene_sqlalchemy_filter\connection_field.py", line 326, in _get_or_create_data_loader
    current_data_loader = ModelLoader(type(root), model, info, args)
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\graphene_sqlalchemy_filter\connection_field.py", line 137, in __init__
    self.parent_model_pks: 'Tuple[str, ...]' = self._get_model_pks(
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\graphene_sqlalchemy_filter\connection_field.py", line 197, in _get_model_pks
    for name, c in inspection.inspect(model).columns.items()
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\sqlalchemy\sql\base.py", line 1106, in __getattr__
    util.raise_(AttributeError(key), replace_context=err)
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\sqlalchemy\util\compat.py", line 180, in raise_
    raise exception
AttributeError: items
Traceback (most recent call last):
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\graphql\execution\executor.py", line 452, in resolve_or_error
    return executor.execute(resolve_fn, source, info, **args)
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\graphql\execution\executors\sync.py", line 16, in execute
    return fn(*args, **kwargs)
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\graphene_sqlalchemy_filter\connection_field.py", line 356, in connection_resolver
    data_loader: ModelLoader = cls._get_or_create_data_loader(
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\graphene_sqlalchemy_filter\connection_field.py", line 326, in _get_or_create_data_loader
    current_data_loader = ModelLoader(type(root), model, info, args)
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\graphene_sqlalchemy_filter\connection_field.py", line 137, in __init__
    self.parent_model_pks: 'Tuple[str, ...]' = self._get_model_pks(
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\graphene_sqlalchemy_filter\connection_field.py", line 197, in _get_model_pks
    for name, c in inspection.inspect(model).columns.items()
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\sqlalchemy\sql\base.py", line 1106, in __getattr__
    util.raise_(AttributeError(key), replace_context=err)
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\sqlalchemy\util\compat.py", line 180, in raise_
    raise exception
graphql.error.located_error.GraphQLLocatedError: items

An error occurred while resolving field SongNode.tags
Traceback (most recent call last):
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\graphene_sqlalchemy_filter\connection_field.py", line 324, in _get_or_create_data_loader
    current_data_loader: ModelLoader = data_loaders[data_loader_key]
KeyError: ('allSongs', 'edges', 'node', 'tags')

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\sqlalchemy\sql\base.py", line 1104, in __getattr__
    return self._index[key]
KeyError: 'items'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\graphql\execution\executor.py", line 452, in resolve_or_error
    return executor.execute(resolve_fn, source, info, **args)
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\graphql\execution\executors\sync.py", line 16, in execute
    return fn(*args, **kwargs)
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\graphene_sqlalchemy_filter\connection_field.py", line 356, in connection_resolver
    data_loader: ModelLoader = cls._get_or_create_data_loader(
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\graphene_sqlalchemy_filter\connection_field.py", line 326, in _get_or_create_data_loader
    current_data_loader = ModelLoader(type(root), model, info, args)
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\graphene_sqlalchemy_filter\connection_field.py", line 137, in __init__
    self.parent_model_pks: 'Tuple[str, ...]' = self._get_model_pks(
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\graphene_sqlalchemy_filter\connection_field.py", line 197, in _get_model_pks
    for name, c in inspection.inspect(model).columns.items()
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\sqlalchemy\sql\base.py", line 1106, in __getattr__
    util.raise_(AttributeError(key), replace_context=err)
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\sqlalchemy\util\compat.py", line 180, in raise_
    raise exception
AttributeError: items
Traceback (most recent call last):
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\graphql\execution\executor.py", line 452, in resolve_or_error
    return executor.execute(resolve_fn, source, info, **args)
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\graphql\execution\executors\sync.py", line 16, in execute
    return fn(*args, **kwargs)
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\graphene_sqlalchemy_filter\connection_field.py", line 356, in connection_resolver
    data_loader: ModelLoader = cls._get_or_create_data_loader(
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\graphene_sqlalchemy_filter\connection_field.py", line 326, in _get_or_create_data_loader
    current_data_loader = ModelLoader(type(root), model, info, args)
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\graphene_sqlalchemy_filter\connection_field.py", line 137, in __init__
    self.parent_model_pks: 'Tuple[str, ...]' = self._get_model_pks(
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\graphene_sqlalchemy_filter\connection_field.py", line 197, in _get_model_pks
    for name, c in inspection.inspect(model).columns.items()
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\sqlalchemy\sql\base.py", line 1106, in __getattr__
    util.raise_(AttributeError(key), replace_context=err)
  File "c:\users\geoffrey\appdata\local\programs\python\python38\lib\site-packages\sqlalchemy\util\compat.py", line 180, in raise_
    raise exception
graphql.error.located_error.GraphQLLocatedError: items

I feel like this may be related to #38 but I'm not sure, opening a separate issue just in case.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant