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

Have required and NonNull true by default at the project level #1425

Open
TomsOverBaghdad opened this issue Jun 3, 2022 · 3 comments
Open

Comments

@TomsOverBaghdad
Copy link

Is your feature request related to a problem? Please describe.
I'm always frustrated when I have to explicitly set required a List field, or any field for that matter. It makes for really frustrating usage of our APIs that rely on typescript types generated by our graphene schema. We have to constantly add unnecessary checks and write more obtuse code just to satisfy our types. On top of that, the way that this typing is done both in python(pyright and I believe others) and in typescript are the exact opposite, you explicitly define that something can be optional. This makes it extremely unintuitive and hard to spot issues until the api starts getting use from our typescript apps.

Describe the solution you'd like
A setting at the root level to have required default to true always se we have to explicitly set required to false. This would also apply to NonNull for list queries which might need a Nullable, or Optional, or allow the required argument for type to work with the list.

Describe alternatives you've considered
I can build new types that extend the existing types and add a linter to make sure none of the original types are being used in future development. It's doable, and I'll end up doing it, but the solution I'm suggesting doesn't feel that farfetched to put in for others who may have this frustration.

Additional context
In typescript if I want to type as an array I can use Array, or [], and it will be an array, it wont expect null and it wont expect undefined. I have to be explicit if the value is nullable or undefined. Similarly in python, with pyright at least, you also have to be making sure to be explicit that the type is optional or nullable.

I'm at the very least curious why required is defaulted to false in the first place.

@TomsOverBaghdad
Copy link
Author

TomsOverBaghdad commented Sep 26, 2022

Messaging to hopefully get a response. I'm happy to put up a PR but if it's not going to be accepted from the get-go then I won't waste my time. It wouldn't break existing functionality, allowing the user to opt in to defaulting to optional or required.

@erikwrede
Copy link
Member

Hey there, sorry for the wait. I think this would be a great Quality of Life improvement for many users. We should discuss where this is best implemented. Cleanest option would probably be an argument of the Schema class. However, that might create issues in the field initialization phase. I haven't had the time to look into it yet. Happy discuss any ideas you come up with!

@TomsOverBaghdad
Copy link
Author

@erikwrede thanks for responding!! I have an idea and would love your opinion.

I could maybe doing some sort of global settings module that one could set at the start of their program. Then updating the Field init required param to required=None and if the value is none, set the value based on the settings default.

The global settings could also be useful for other global options or options similar to this if they've been requested

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

No branches or pull requests

2 participants