Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Conversion to snake_case fails on nested inputs

Abierto
#1,537 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
3/5
Tiempo estimado
1-2 días
Aptitud para principiantes
45/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
graphql, python
Área
api, backend

Línea de trabajo

Comienza con la reproducción de RegisterPlaceInput, PlaceInput y PostalAddressInput, y rastrea cómo se convierten los valores anidados de InputObjectType. Reproduce la salida camelCase del nivel más profundo, luego añade cobertura de regresión y verifica que cada clave anidada se convierta a snake_case.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

🐛 bug
  • 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)
Lenguaje dominante
Python
Estrellas
8.2k
Forks
822
Métricas de merge de PR
Sin PR fusionados en 30 d

Preparar el entorno

Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de graphql-python/graphene

Todos los issues de graphql-python/graphene

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.