fix: @_helpers.positional raises TypeError when decorating functions without default arguments
Maintainer antworten meist innerhalb von 1 Tag
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 1/5
- Geschätzter Aufwand
- Unter einer Stunde
- Anfängerfreundlichkeit
- 88/100
Rechercherichtung
Der Issue verweist auf googleapiclient/_helpers.py und den Pfad zur Ermittlung des Standardwerts in positional(). Lies diese Funktion und prüfe die vorhandenen Tests für die Verwendung des Decorators ohne Argumente; ergänze Tests für Funktionen ohne Standardwerte und ohne Parameter. Erledigt ist die Aufgabe, wenn diese Fälle beim Decorieren keinen Fehler mehr auslösen und die Tests bestehen.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
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)
- Vorherrschende Sprache
- Python
- Sterne
- 9k
- Forks
- 2.6k
- Ø Merge
- 8 Std. 36 Min.
- Gemergte PRs (30 T.)
- 7
Entwicklungsumgebung
- Kein Dockerfile und keine Docker-Compose-Datei
- Hat eine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus googleapis/google-api-python-client
-
fix: @_helpers.positional raises TypeError when decorating functions without default argumentsEvtl. vergeben @codeXsidd hat das vor 2 Tagen übernommen. Offen
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 88/100
googleapis/google-api-python-client#2845 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Disable prettyPrint by default for Google Sheets API responsesEvtl. vergeben @pawciobiel hat das vor 70 Tagen übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
googleapis/google-api-python-client#2788 ·
Maintainer antworten meist innerhalb von 1 Tag
-
test: connection leak test test_discovery_http_is_closed is shadowed and syntactically invalidEvtl. vergeben @Capstan hat das vor 146 Tagen übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
googleapis/google-api-python-client#2757 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
test: strict positional parameter enforcement is ignored under pytestEvtl. vergeben @Capstan hat das vor 146 Tagen übernommen. Offen
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 92/100
googleapis/google-api-python-client#2755 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 35/100
googleapis/google-api-python-client#2825 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
Alle Issues in googleapis/google-api-python-client
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
Maintainer antworten meist innerhalb von 1 Tag
-
enhancement good first issue
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
iceboundrock/AutoForge#304 ·
Maintainer antworten meist innerhalb von 1 Tag
-
enhancement
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
fossasia/visdom-dev#77 ·
Maintainer antworten meist innerhalb von 4 Tagen
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
aws-cloudformation/cfn-lint#4890 ·
Maintainer antworten meist innerhalb von 2 Tagen