graphql-python / graphql-python/graphene
Graphene v3 ignores mixin/multiple inheritance methods
- Lenguaje dominante
- Python
- Estrellas
- 8.2k
- Forks
- 818
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Descripción
* **What is the current behavior?**
* **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.
We use mixins to override `__init__` (and other methods) for certain types. However, Graphene 3 does not seem to handle this python multiple-inheritance correctly. It calls the default `graphene.ObjectType.__init__` instead of the custom `__init__` method defined on the mixin.
A minimal example:
```python
import graphene
class Mixin:
def __init__(self):
print("Calling Mixin.__init__()...")
super().__init__(
value="mixin value"
)
class Thing(Mixin, graphene.ObjectType):
value = graphene.String()
class TestQuery(graphene.ObjectType):
test = graphene.Field(Thing)
resolve_test = lambda parent, info: Thing()
schema = graphene.Schema(query=TestQuery)
print(schema.execute(
"""
{
test {
value
}
}
"""
))
```
In Graphene 2, this works correctly, printing the result `ExecutionResult(data={'test': {'value': 'mixin value'}}, errors=None)` and the statement `Calling Mixin.__init__()...`. However, in Graphene 3, we get the result `ExecutionResult(data={'test': {'value': None}}, errors=None)`, and `Calling Mixin.__init__()...` never prints.
* **What is the expected behavior?**
- `Mixin.__init__` should be called.
- The result of the query should be `ExecutionResult(data={'test': {'value': 'mixin value'}}, errors=None)`
* **What is the motivation / use case for changing the behavior?**
Maintain functionality of graphene 2, enable use of multiple inheritance/mixins
* **Please tell us about your environment:**
- Version: `graphene==3.0b6`
- python `3.6.8`
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Línea de trabajo
Comienza ejecutando el ejemplo mínimo de Python con Graphene 3 y compara su comportamiento con el resultado de Graphene 2. Sigue la construcción de Thing graphene.ObjectType a través de TestQuery y verifica que se llame a Mixin.__init__ y que la consulta devuelva el valor esperado.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python
- Área
- api
- Tipo de issue
- Error
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Estado de actividad
- Estancado
- Claridad
- Bien especificado
- Aptitud para principiantes
- 45/100