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

Conversion to snake_case fails on nested inputs #1537

Open
advl opened this issue Feb 10, 2024 · 0 comments
Open

Conversion to snake_case fails on nested inputs #1537

advl opened this issue Feb 10, 2024 · 0 comments
Labels

Comments

@advl
Copy link

advl commented Feb 10, 2024

  • What is the current behavior?
    I have double nested inputs, the first two levels are properly converted to snake_case, the third one (deepest) is not.

  • If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem via
    a github repo, https://repl.it or similar.

import graphene
from django.contrib.auth import get_user_model

from ..models import Place, PostalAddress

User = get_user_model()

class OwnerInput(graphene.InputObjectType):
    first_name = graphene.String(required=True)
    last_name = graphene.String(required=True)

class PostalAddressInput(graphene.InputObjectType):
    street_address = graphene.String(required=True)
    address_locality = graphene.String(required=True)
    address_region = graphene.String(required=True)
    postal_code = graphene.String(required=True)
    address_country = graphene.String(required=True)


class PlaceInput(graphene.InputObjectType):
    latitude = graphene.Float(required=True)
    longitude = graphene.Float(required=True)
    postal_address = graphene.Field(PostalAddressInput, required=True)


class RegisterPlaceInput(graphene.InputObjectType):
    owner = graphene.Field(OwnerInput, required=True)
    place = graphene.Field(PlaceInput, required=True)

class RegisterPlaceMutation(graphene.Mutation):
    class Arguments:
        input = graphene.Argument(RegisterPlaceInput, required=True)

    success = graphene.Boolean(
        description="Indicates whether the operation was successful."
    )

    def mutate(root, info, input):
        print(input)
        owner_data = input['owner'] #Converted to snake
        place_data = input['place'] #converted to snake at the lower level
        postal_address_data = place_data['postal_address'] # remains camel

        postal_address = PostalAddress.objects.create(**postal_address_data) #fails as data not in the right shape

        place = Place.objects.create(
            latitude=place_data['latitude'],
            longitude=place_data['longitude'],
            postal_address=postal_address,
        )

        return RegisterPlaceMutation(success=True)


class Mutation(graphene.ObjectType):
    register_place = RegisterPlaceMutation.Field()

print gives :

>>  {'owner': {'first_name': 'JOHN', 'last_name
': 'DOE'}, 'place': {'latitude': 48.9230953, 'longitude': 2.0303184, 'postal_address': {'streetAddress': 'Skalitzer Strasse 99', 'addressLocality': 'Berlin', 'addressRegion': 'Berlin', 'post
alCode': '10997', 'addressCountry': 'DE'}}}
  • What is the expected behavior?
    All nested object keys are converted to snake_case.

  • What is the motivation / use case for changing the behavior?
    snake_case conversion should be consistent independently of the shape of the input

  • Please tell us about your environment:

    • Version: 3.3
    • Platform: with graphene_django 3.2 - (unsure if it's relevant)
@advl advl added the 🐛 bug label Feb 10, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant