-
-
Notifications
You must be signed in to change notification settings - Fork 28
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
add missing page_info / cursors for Association Proxy logic #232
base: main
Are you sure you want to change the base?
Conversation
Reviewer's Guide by SourceryThe pull request addresses a bug in the Sequence diagram for association proxy resolver with relay paginationsequenceDiagram
participant Client
participant Resolver
participant AssociationProxy
participant Connection
Client->>Resolver: Request data
Resolver->>AssociationProxy: resolve(info)
alt in_between_objects is None
AssociationProxy-->>Connection: Create with empty edges + PageInfo
else has objects
AssociationProxy->>AssociationProxy: Process objects
AssociationProxy-->>Connection: Create with edges + PageInfo + cursors
end
Connection-->>Client: Return paginated data
Class diagram for connection types with relay paginationclassDiagram
class PageInfo {
+boolean has_next_page
+boolean has_previous_page
+string start_cursor
+string end_cursor
}
class ConnectionType {
+List~Edge~ edges
+PageInfo page_info
}
class Edge {
+Object node
+string cursor
}
ConnectionType *-- PageInfo
ConnectionType *-- Edge
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hey @tylernisonoff - I've reviewed your changes - here's some feedback:
Overall Comments:
- The hardcoded
has_next_page
andhas_previous_page
values should be calculated based on the actual data and pagination parameters rather than always being set toFalse
- Consider adding tests for the pagination behavior to prevent future regressions, even though the original code was untested
Here's what I looked at during the review
- 🟢 General issues: all looks good
- 🟢 Security: all looks good
- 🟢 Testing: all looks good
- 🟢 Complexity: all looks good
- 🟢 Documentation: all looks good
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.
Thanks so muck for your contribuition, @tylernisonoff , sorry for the delay! I'll review it ASAP! |
Hi, @tylernisonoff , sorry for the delay. |
@Ckk3 I'm happy to help here, but honestly I'm not sure I understand the code well enough to know how to write tests for this. I simply saw the stacktrace errors, and saw that these were not passing in the appropriate commands, but given the lack of tests for the code before, I'm not sure how to scaffold tests here without really digging deeper into the code :/ I'd be happy to try to implement with ideas, or allow someone who knows the internals better to build on top of this |
Thanks @tylernisonoff , can you send the stacktrace? That way it easier to see if make sense create new tests for this. Thanks again! |
@Ckk3 heres a sample stacktrace: File "/Users/user/Library/Caches/pypoetry/virtualenvs/project-S0mj9Dhs-py3.10/lib/python3.10/site-packages/graphql/execution/execute.py", line 523, in execute_field
result = resolve_fn(source, info, **args)
File "/Users/user/Library/Caches/pypoetry/virtualenvs/project-S0mj9Dhs-py3.10/lib/python3.10/site-packages/strawberry/extensions/tracing/datadog.py", line 179, in resolve
return _next(root, info, *args, **kwargs)
File "/Users/user/Library/Caches/pypoetry/virtualenvs/project-S0mj9Dhs-py3.10/lib/python3.10/site-packages/strawberry/schema/schema_converter.py", line 741, in _resolver
return _get_result_with_extensions(
File "/Users/user/Library/Caches/pypoetry/virtualenvs/project-S0mj9Dhs-py3.10/lib/python3.10/site-packages/strawberry/schema/schema_converter.py", line 728, in extension_resolver
return reduce(
File "/Users/user/Library/Caches/pypoetry/virtualenvs/project-S0mj9Dhs-py3.10/lib/python3.10/site-packages/strawberry/schema/schema_converter.py", line 723, in wrapped_get_result
return _get_result(
File "/Users/user/Library/Caches/pypoetry/virtualenvs/project-S0mj9Dhs-py3.10/lib/python3.10/site-packages/strawberry/schema/schema_converter.py", line 680, in _get_result
return field.get_result(
File "/Users/user/Library/Caches/pypoetry/virtualenvs/project-S0mj9Dhs-py3.10/lib/python3.10/site-packages/strawberry/types/field.py", line 223, in get_result
return self.base_resolver(*args, **kwargs)
File "/Users/user/Library/Caches/pypoetry/virtualenvs/project-S0mj9Dhs-py3.10/lib/python3.10/site-packages/strawberry/types/fields/resolver.py", line 206, in __call__
return self.wrapped_func(*args, **kwargs)
File "<non-library-code>", line 727, in <lib code>
edges = [FooEdge(node=a) for a in awards]
File "<non-library-code>", line 727, in <listcomp>
edges = [FooEdge(node=a) for a in awards]
TypeError: FooEdge.__init__() missing 1 required keyword-only argument: 'cursor' |
Thanks, @tylernisonoff , I think we can reproduce this error! Can you send the model declaration, the strawberry query (or mutation) and the sqlalchemy table? Please make sure you dont send any private information, We just need the code example. |
@Ckk3 sorry for the delay, my model declaration and strawberry queries are all proprietary code -- I dont have a simple local repro that could be used as a code example. I dont want to put the onus on the maintainers, but realistically, I dont think I have the in-depth knowledge to set up a code sample -- im not sure what set-ups lead to hitting this code, I just saw we were hitting it, and that the code was clearly wrong. Is there a chance we can merge this and work on tests after? The existing code is both untested and broken. This at least makes the current code untested but working. |
Thanks for your patience, @tylernisonoff! I totally understand you, but I’m not comfortable merging this until we have tests in place. Untested code can easily lead to more bugs like this one, and we want to make sure things are solid before moving forward. I’ll go ahead and write the tests myself so we can make sure everything works properly before merging. Thanks again for understanding, and I’ll get those tests added as soon as I can! |
Description
association_proxy_resolver_for
has a few code blocks that were not updated for the relay changes. Association proxy mapping would fail due do constructors missing eitherpage_info
orcursor
args.Types of Changes
Issues Fixed or Closed by This PR
Checklist
I haven't added tests as it looks like this code is originally untested.
Summary by Sourcery
Bug Fixes:
page_info
orcursor
arguments in constructors.