strawberry-graphql / strawberry

A GraphQL library for Python that leverages type annotations ๐Ÿ“
https://strawberry.rocks
MIT License
3.94k stars 521 forks source link

From future import annotations breaks lazy types #3568

Open Dartt0n opened 2 months ago

Dartt0n commented 2 months ago

Describe the Bug

from __future__ import annotations breaks type resolver which results in TypeError: Model fields cannot be resolved. Unexpected type 'typing.Any'

I did not manage to track down what exactly causes this issue, but whenever I add from __future__ import annotations to the top of the file with strawberry types - strawberry type resolver breaks

System Information

Additional Context

Upvote & Fund

Fund with Polar

Dartt0n commented 2 months ago

Update: was able to reproduce with the following code

  1. post.py:
    
    from __future__ import annotations

from typing import TYPE_CHECKING, Annotated

import strawberry

if TYPE_CHECKING: from .user import User

LazyUser = Annotated["User", strawberry.lazy(".user")]

@strawberry.type class Post: user: LazyUser


2. `user.py`:
```python
from typing import TYPE_CHECKING, Annotated
import strawberry

if TYPE_CHECKING:
    from .post import Post

@strawberry.type
class User:
    posts: list[Annotated["Post", strawberry.lazy(".post")]]

Failes with:

Traceback ```text โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ Traceback (most recent call last) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚ /Users/dartt0n/Downloads/strawberry-bug/.venv/lib/python3.12/site-packages/strawberry/cli/c โ”‚ โ”‚ ommands/server.py:65 in server โ”‚ โ”‚ โ”‚ โ”‚ 62 โ”‚ โ”‚ ) โ”‚ โ”‚ 63 โ”‚ โ”‚ raise typer.Exit(1) โ”‚ โ”‚ 64 โ”‚ โ”‚ โ”‚ โฑ 65 โ”‚ load_schema(schema, app_dir=app_dir) โ”‚ โ”‚ 66 โ”‚ โ”‚ โ”‚ 67 โ”‚ os.environ[DEBUG_SERVER_SCHEMA_ENV_VAR_KEY] = schema โ”‚ โ”‚ 68 โ”‚ os.environ[DEBUG_SERVER_LOG_OPERATIONS] = str(log_operations) โ”‚ โ”‚ โ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚ โ”‚ โ”‚ app_dir = '.' โ”‚ โ”‚ โ”‚ โ”‚ host = '0.0.0.0' โ”‚ โ”‚ โ”‚ โ”‚ log_level = โ”‚ โ”‚ โ”‚ โ”‚ log_operations = True โ”‚ โ”‚ โ”‚ โ”‚ port = 8000 โ”‚ โ”‚ โ”‚ โ”‚ schema = 'src.schema' โ”‚ โ”‚ โ”‚ โ”‚ starlette = โ”‚ โ”‚ โ”‚ โ”‚ module = โ”‚ โ”‚ โ”‚ โ”‚ name = 'src.schema' โ”‚ โ”‚ โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ”‚ โ”‚ in _find_and_load_unlocked:1331 โ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚ โ”‚ โ”‚ child = 'schema' โ”‚ โ”‚ โ”‚ โ”‚ import_ = โ”‚ โ”‚ โ”‚ โ”‚ name = 'src.schema' โ”‚ โ”‚ โ”‚ โ”‚ parent = 'src' โ”‚ โ”‚ โ”‚ โ”‚ parent_module = โ”‚ โ”‚ โ”‚ โ”‚ parent_spec = ModuleSpec(name='src', โ”‚ โ”‚ โ”‚ โ”‚ loader=<_frozen_importlib_external.SourceFileLoader object at โ”‚ โ”‚ โ”‚ โ”‚ 0x107282120>, โ”‚ โ”‚ โ”‚ โ”‚ origin='/Users/dartt0n/Downloads/strawberry-bug/src/__init__.py', โ”‚ โ”‚ โ”‚ โ”‚ submodule_search_locations=['/Users/dartt0n/Downloads/strawberry-bug/sโ€ฆ โ”‚ โ”‚ โ”‚ โ”‚ path = ['/Users/dartt0n/Downloads/strawberry-bug/src'] โ”‚ โ”‚ โ”‚ โ”‚ spec = ModuleSpec(name='src.schema', โ”‚ โ”‚ โ”‚ โ”‚ loader=<_frozen_importlib_external.SourceFileLoader object at โ”‚ โ”‚ โ”‚ โ”‚ 0x107282420>, โ”‚ โ”‚ โ”‚ โ”‚ origin='/Users/dartt0n/Downloads/strawberry-bug/src/schema.py') โ”‚ โ”‚ โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ”‚ โ”‚ in _load_unlocked:935 โ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚ โ”‚ โ”‚ module = โ”‚ โ”‚ โ”‚ โ”‚ spec = ModuleSpec(name='src.schema', โ”‚ โ”‚ โ”‚ โ”‚ loader=<_frozen_importlib_external.SourceFileLoader object at 0x107282420>, โ”‚ โ”‚ โ”‚ โ”‚ origin='/Users/dartt0n/Downloads/strawberry-bug/src/schema.py') โ”‚ โ”‚ โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ”‚ โ”‚ in exec_module:995 โ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚ โ”‚ โ”‚ code = at 0x1071f2930, file โ”‚ โ”‚ โ”‚ โ”‚ "/Users/dartt0n/Downloads/strawberry-bug/src/schema.py", line 1> โ”‚ โ”‚ โ”‚ โ”‚ module = โ”‚ โ”‚ โ”‚ โ”‚ self = <_frozen_importlib_external.SourceFileLoader object at 0x107282420> โ”‚ โ”‚ โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ”‚ โ”‚ in _call_with_frames_removed:488 โ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚ โ”‚ โ”‚ args = ( โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ at 0x1071f2930, file โ”‚ โ”‚ โ”‚ โ”‚ "/Users/dartt0n/Downloads/strawberry-bug/src/schema.py", line 1>, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ { โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ '__name__': 'src.schema', โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ '__doc__': None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ '__package__': 'src', โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ '__loader__': <_frozen_importlib_external.SourceFileLoader object at โ”‚ โ”‚ โ”‚ โ”‚ 0x107282420>, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ '__spec__': ModuleSpec(name='src.schema', โ”‚ โ”‚ โ”‚ โ”‚ loader=<_frozen_importlib_external.SourceFileLoader object at 0x107282420>, โ”‚ โ”‚ โ”‚ โ”‚ origin='/Users/dartt0n/Downloads/strawberry-bug/src/schema.py'), โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ '__file__': '/Users/dartt0n/Downloads/strawberry-bug/src/schema.py', โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ '__cached__': โ”‚ โ”‚ โ”‚ โ”‚ '/Users/dartt0n/Downloads/strawberry-bug/src/__pycache__/schema.cpython-312.pycโ€ฆ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ '__builtins__': { โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ '__name__': 'builtins', โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ '__doc__': 'Built-in functions, types, exceptions, and other โ”‚ โ”‚ โ”‚ โ”‚ objects.\n\nThis module provides '+346, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ '__package__': '', โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ '__loader__': , โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ '__spec__': ModuleSpec(name='builtins', loader=, origin='built-in'), โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ '__build_class__': , โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ '__import__': , โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ 'abs': , โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ 'all': , โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ 'any': , โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ... +147 โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ }, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ 'strawberry': โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ } โ”‚ โ”‚ โ”‚ โ”‚ ) โ”‚ โ”‚ โ”‚ โ”‚ f = โ”‚ โ”‚ โ”‚ โ”‚ kwds = {} โ”‚ โ”‚ โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ”‚ โ”‚ โ”‚ โ”‚ /Users/dartt0n/Downloads/strawberry-bug/src/schema.py:6 in โ”‚ โ”‚ โ”‚ โ”‚ 3 from .query import Query โ”‚ โ”‚ 4 โ”‚ โ”‚ 5 โ”‚ โ”‚ โฑ 6 schema = strawberry.Schema(query=Query) โ”‚ โ”‚ 7 โ”‚ โ”‚ โ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚ โ”‚ โ”‚ Query = โ”‚ โ”‚ โ”‚ โ”‚ strawberry = โ”‚ โ”‚ โ”‚ โ”‚ query_type = โ”‚ โ”‚ โ”‚ โ”‚ scalar_overrides = None โ”‚ โ”‚ โ”‚ โ”‚ SCALAR_OVERRIDES_DICT_TYPE = typing.Dict[object, โ”‚ โ”‚ โ”‚ โ”‚ typing.Union[ForwardRef('ScalarWrapper'), โ”‚ โ”‚ โ”‚ โ”‚ ForwardRef('ScalarDefinition')]] โ”‚ โ”‚ โ”‚ โ”‚ scalar_registry = { โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ : ScalarDefinition( โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ name='Void', โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ description='Represents NULL values', โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ specified_by_url=None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ serialize=, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ parse_value=, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ parse_literal=None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ directives=(), โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ implementation=None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ _source_file='/Users/dartt0n/Downloads/strawberry-bug/.veโ€ฆ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ _source_line=76 โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ), โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ None: ScalarDefinition( โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ name='Void', โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ description='Represents NULL values', โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ specified_by_url=None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ serialize=, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ parse_value=, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ parse_literal=None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ directives=(), โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ implementation=None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ _source_file='/Users/dartt0n/Downloads/strawberry-bug/.veโ€ฆ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ _source_line=76 โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ), โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ : ScalarDefinition( โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ name='String', โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ description='String', โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ specified_by_url=None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ serialize=, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ parse_value=, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ parse_literal=, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ directives=(), โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ implementation=, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ _source_file=None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ _source_line=None โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ), โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ : ScalarDefinition( โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ name='Int', โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ description='Int', โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ specified_by_url=None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ serialize=, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ parse_value=, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ parse_literal=, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ directives=(), โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ implementation=, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ _source_file=None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ _source_line=None โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ), โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ : ScalarDefinition( โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ name='Float', โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ description='Float', โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ specified_by_url=None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ serialize=, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ parse_value=, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ parse_literal=, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ directives=(), โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ implementation=, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ _source_file=None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ _source_line=None โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ), โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ : ScalarDefinition( โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ name='Boolean', โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ description='Boolean', โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ specified_by_url=None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ serialize=, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ parse_value=, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ parse_literal=, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ directives=(), โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ implementation=, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ _source_file=None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ _source_line=None โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ), โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ strawberry.scalars.ID: ScalarDefinition( โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ name='ID', โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ description='ID', โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ specified_by_url=None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ serialize=, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ parse_value=, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ parse_literal=, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ directives=(), โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ implementation=, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ _source_file=None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ _source_line=None โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ), โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ : ScalarDefinition( โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ name='UUID', โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ description=None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ specified_by_url=None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ serialize=, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ parse_value=.inner โ”‚ โ”‚ โ”‚ โ”‚ at 0x104e97560>, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ parse_literal=None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ directives=(), โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ implementation=None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ _source_file='/Users/dartt0n/Downloads/strawberry-bug/.veโ€ฆ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ _source_line=63 โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ), โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ : ScalarDefinition( โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ name='Upload', โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ description=None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ specified_by_url=None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ serialize=, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ parse_value= at 0x104e13e20>, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ parse_literal=None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ directives=(), โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ implementation=None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ _source_file='/Users/dartt0n/Downloads/strawberry-bug/.veโ€ฆ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ _source_line=5 โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ), โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ : ScalarDefinition( โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ name='Date', โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ description='Date (isoformat)', โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ specified_by_url=None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ serialize=operator.methodcaller('isoformat'), โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ parse_value=.inner โ”‚ โ”‚ โ”‚ โ”‚ at 0x104e97380>, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ parse_literal=None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ directives=(), โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ implementation=None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ _source_file='/Users/dartt0n/Downloads/strawberry-bug/.veโ€ฆ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ _source_line=33 โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ), โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ... +4 โ”‚ โ”‚ โ”‚ โ”‚ } โ”‚ โ”‚ โ”‚ โ”‚ schema_directives = () โ”‚ โ”‚ โ”‚ โ”‚ self = โ”‚ โ”‚ โ”‚ โ”‚ StrawberryException = โ”‚ โ”‚ โ”‚ โ”‚ subscription = None โ”‚ โ”‚ โ”‚ โ”‚ subscription_type = None โ”‚ โ”‚ โ”‚ โ”‚ types = () โ”‚ โ”‚ โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ”‚ โ”‚ โ”‚ โ”‚ /Users/dartt0n/Downloads/strawberry-bug/.venv/lib/python3.12/site-packages/graphql/type/def โ”‚ โ”‚ inition.py:808 in fields โ”‚ โ”‚ โ”‚ โ”‚ 805 โ”‚ def fields(self) -> GraphQLFieldMap: โ”‚ โ”‚ 806 โ”‚ โ”‚ """Get provided fields, wrapping them as GraphQLFields if needed.""" โ”‚ โ”‚ 807 โ”‚ โ”‚ try: โ”‚ โ”‚ โฑ 808 โ”‚ โ”‚ โ”‚ fields = resolve_thunk(self._fields) โ”‚ โ”‚ 809 โ”‚ โ”‚ except Exception as error: โ”‚ โ”‚ 810 โ”‚ โ”‚ โ”‚ cls = GraphQLError if isinstance(error, GraphQLError) else TypeError โ”‚ โ”‚ 811 โ”‚ โ”‚ โ”‚ raise cls(f"{self.name} fields cannot be resolved. {error}") from error โ”‚ โ”‚ โ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚ โ”‚ โ”‚ cls = โ”‚ โ”‚ โ”‚ โ”‚ self = โ”‚ โ”‚ โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ”‚ โ”‚ โ”‚ โ”‚ /Users/dartt0n/Downloads/strawberry-bug/.venv/lib/python3.12/site-packages/graphql/type/def โ”‚ โ”‚ inition.py:300 in resolve_thunk โ”‚ โ”‚ โ”‚ โ”‚ 297 โ”‚ Used while defining GraphQL types to allow for circular references in otherwise โ”‚ โ”‚ 298 โ”‚ immutable type definitions. โ”‚ โ”‚ 299 โ”‚ """ โ”‚ โ”‚ โฑ 300 โ”‚ return thunk() if callable(thunk) else thunk โ”‚ โ”‚ 301 โ”‚ โ”‚ 302 โ”‚ โ”‚ 303 GraphQLScalarSerializer = Callable[[Any], Any] โ”‚ โ”‚ โ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚ โ”‚ โ”‚ thunk = . at 0x10729c400> โ”‚ โ”‚ โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ”‚ โ”‚ โ”‚ โ”‚ /Users/dartt0n/Downloads/strawberry-bug/.venv/lib/python3.12/site-packages/strawberry/schem โ”‚ โ”‚ a/schema_converter.py:635 in โ”‚ โ”‚ โ”‚ โ”‚ 632 โ”‚ โ”‚ โ”‚ โ”‚ 633 โ”‚ โ”‚ graphql_object_type = GraphQLObjectType( โ”‚ โ”‚ 634 โ”‚ โ”‚ โ”‚ name=object_type_name, โ”‚ โ”‚ โฑ 635 โ”‚ โ”‚ โ”‚ fields=lambda: self.get_graphql_fields(object_type), โ”‚ โ”‚ 636 โ”‚ โ”‚ โ”‚ interfaces=list(map(self.from_interface, object_type.interfaces)), โ”‚ โ”‚ 637 โ”‚ โ”‚ โ”‚ description=object_type.description, โ”‚ โ”‚ 638 โ”‚ โ”‚ โ”‚ is_type_of=_get_is_type_of(), โ”‚ โ”‚ โ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚ โ”‚ โ”‚ object_type = StrawberryObjectDefinition( โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ name='Post', โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ is_input=False, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ is_interface=False, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ origin=, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ description=None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ interfaces=[], โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ extend=False, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ directives=(), โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ is_type_of=None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ resolve_type=None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ fields=[ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ Field(name='user',type=,default=,default_factory=,init=True,repr=True,hash=None,compare=True,metadata=mappingโ€ฆ โ”‚ โ”‚ โ”‚ โ”‚ object at 0x1045921e0>,_field_type=None) โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ], โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ concrete_of=None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ type_var_map={} โ”‚ โ”‚ โ”‚ โ”‚ ) โ”‚ โ”‚ โ”‚ โ”‚ self = โ”‚ โ”‚ โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ”‚ โ”‚ โ”‚ โ”‚ /Users/dartt0n/Downloads/strawberry-bug/.venv/lib/python3.12/site-packages/strawberry/schem โ”‚ โ”‚ a/schema_converter.py:440 in get_graphql_fields โ”‚ โ”‚ โ”‚ โ”‚ 437 โ”‚ def get_graphql_fields( โ”‚ โ”‚ 438 โ”‚ โ”‚ self, type_definition: StrawberryObjectDefinition โ”‚ โ”‚ 439 โ”‚ ) -> Dict[str, GraphQLField]: โ”‚ โ”‚ โฑ 440 โ”‚ โ”‚ return _get_thunk_mapping( โ”‚ โ”‚ 441 โ”‚ โ”‚ โ”‚ type_definition=type_definition, โ”‚ โ”‚ 442 โ”‚ โ”‚ โ”‚ name_converter=self.config.name_converter.from_field, โ”‚ โ”‚ 443 โ”‚ โ”‚ โ”‚ field_converter=self.from_field, โ”‚ โ”‚ โ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚ โ”‚ โ”‚ self = โ”‚ โ”‚ โ”‚ โ”‚ type_definition = StrawberryObjectDefinition( โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ name='Post', โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ is_input=False, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ is_interface=False, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ origin=, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ description=None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ interfaces=[], โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ extend=False, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ directives=(), โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ is_type_of=None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ resolve_type=None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ fields=[ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ Field(name='user',type=,default=,default_factory=,init=True,repr=True,hash=None,compare=True,metadata=mapโ€ฆ โ”‚ โ”‚ โ”‚ โ”‚ object at 0x1045921e0>,_field_type=None) โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ], โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ concrete_of=None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ type_var_map={} โ”‚ โ”‚ โ”‚ โ”‚ ) โ”‚ โ”‚ โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ”‚ โ”‚ โ”‚ โ”‚ /Users/dartt0n/Downloads/strawberry-bug/.venv/lib/python3.12/site-packages/strawberry/schem โ”‚ โ”‚ a/schema_converter.py:135 in _get_thunk_mapping โ”‚ โ”‚ โ”‚ โ”‚ 132 โ”‚ โ”‚ field_type = field.type โ”‚ โ”‚ 133 โ”‚ โ”‚ โ”‚ โ”‚ 134 โ”‚ โ”‚ if field_type is UNRESOLVED: โ”‚ โ”‚ โฑ 135 โ”‚ โ”‚ โ”‚ raise UnresolvedFieldTypeError(type_definition, field) โ”‚ โ”‚ 136 โ”‚ โ”‚ โ”‚ โ”‚ 137 โ”‚ โ”‚ if not is_private(field_type): โ”‚ โ”‚ 138 โ”‚ โ”‚ โ”‚ thunk_mapping[name_converter(field)] = field_converter( โ”‚ โ”‚ โ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚ โ”‚ โ”‚ field = Field(name='user',type=,default=,default_factory=,init=True,repr=True,hash=None,compare=True,metadata=mapโ€ฆ โ”‚ โ”‚ โ”‚ โ”‚ object at 0x1045921e0>,_field_type=None) โ”‚ โ”‚ โ”‚ โ”‚ field_converter = > โ”‚ โ”‚ โ”‚ โ”‚ field_type = โ”‚ โ”‚ โ”‚ โ”‚ fields = [ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ Field(name='user',type=,default=,default_factory=,init=True,repr=True,hash=None,compare=True,metadata=mapโ€ฆ โ”‚ โ”‚ โ”‚ โ”‚ object at 0x1045921e0>,_field_type=None) โ”‚ โ”‚ โ”‚ โ”‚ ] โ”‚ โ”‚ โ”‚ โ”‚ get_fields = > โ”‚ โ”‚ โ”‚ โ”‚ name_converter = > โ”‚ โ”‚ โ”‚ โ”‚ thunk_mapping = {} โ”‚ โ”‚ โ”‚ โ”‚ type_definition = StrawberryObjectDefinition( โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ name='Post', โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ is_input=False, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ is_interface=False, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ origin=, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ description=None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ interfaces=[], โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ extend=False, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ directives=(), โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ is_type_of=None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ resolve_type=None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ fields=[ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ Field(name='user',type=,default=,default_factory=,init=True,repr=True,hash=None,compare=True,metadata=mapโ€ฆ โ”‚ โ”‚ โ”‚ โ”‚ object at 0x1045921e0>,_field_type=None) โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ], โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ concrete_of=None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ type_var_map={} โ”‚ โ”‚ โ”‚ โ”‚ ) โ”‚ โ”‚ โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ UnresolvedFieldTypeError: Could not resolve the type of 'user'. Check that the class is accessible from the global module scope. ```

If we remove from __future__ import annotations from post.py types are resolved correctly