fix: @_helpers.positional raises TypeError when decorating functions without default arguments
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 1/5
- Tiempo estimado
- Menos de una hora
- Aptitud para principiantes
- 88/100
Línea de trabajo
El issue señala googleapiclient/_helpers.py y la ruta de inferencia de valores predeterminados de positional(). Lee esa función y revisa las pruebas existentes para el uso del decorador sin argumentos; añade cobertura para funciones sin valores predeterminados y sin parámetros. La tarea está completa cuando esos casos ya no generan errores durante la decoración y las pruebas pasan.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Problem
When @googleapiclient._helpers.positional is used as a bare decorator without arguments (e.g., @positional) on a callable that does not define default argument values (or takes no parameters), it raises TypeError: object of type 'NoneType' has no len() at function definition time.
Current Behavior
In googleapiclient/_helpers.py, positional() infers the maximum number of positional arguments when called without arguments:
if isinstance(max_positional_args, int):
return positional_decorator
else:
args, _, _, defaults, _, _, _ = inspect.getfullargspec(max_positional_args)
return positional(len(args) - len(defaults))(max_positional_args)
When max_positional_args has no default parameters (or takes 0 parameters), inspect.getfullargspec(max_positional_args).defaults returns None.
Evaluating len(defaults) then raises:
TypeError: object of type 'NoneType' has no len()
Expected Behavior
When @positional is used without arguments on a function without default parameters (such as def func(a, b): ...), defaults should default to an empty sequence (e.g., len(defaults or ())), correctly calculating len(args) - 0 = len(args) positional parameters instead of crashing with a TypeError.
Reproduction
from googleapiclient import _helpers
@_helpers.positional
def my_function(a, b):
return a + b
Result:
TypeError: object of type 'NoneType' has no len()
Technical Context
In googleapiclient/_helpers.py, replacing len(defaults) with len(defaults or ()) safely treats None as 0 default arguments:
args, _, _, defaults, _, _, _ = inspect.getfullargspec(max_positional_args)
return positional(len(args) - len(defaults or ()))(max_positional_args)
- Lenguaje dominante
- Python
- Estrellas
- 9k
- Forks
- 2.6k
- Merge medio
- 8 h 36 min
- PR fusionados (30 d)
- 7
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de googleapis/google-api-python-client
-
fix: @_helpers.positional raises TypeError when decorating functions without default argumentsPosiblemente ocupada @codeXsidd la tomó hace 4 días. Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
googleapis/google-api-python-client#2845 ·
Los mantenedores suelen responder en 1 día
-
Disable prettyPrint by default for Google Sheets API responsesPosiblemente ocupada @pawciobiel la tomó hace 73 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
googleapis/google-api-python-client#2788 ·
Los mantenedores suelen responder en 1 día
-
test: connection leak test test_discovery_http_is_closed is shadowed and syntactically invalidPosiblemente ocupada @Capstan la tomó hace 149 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
googleapis/google-api-python-client#2757 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
test: strict positional parameter enforcement is ignored under pytestPosiblemente ocupada @Capstan la tomó hace 149 días. Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 92/100
googleapis/google-api-python-client#2755 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
googleapis/google-api-python-client#2825 · 1 comentario ·
Los mantenedores suelen responder en 1 día
Todos los issues de googleapis/google-api-python-client
Issues similares
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 82/100
btclib-org/btclib-node#2083 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
Gathin23/cleanyourtv#2089 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
jxxghp/MoviePilot#7212 ·
Los mantenedores suelen responder en 1 día
-
Web transport: small test gapsAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Los mantenedores suelen responder en 1 día
-
cli dx rust
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
NekomyaDev/nudge#278 ·
Los mantenedores suelen responder en 1 día