Client generation error when property names differ only by underscore prefix / suffix
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 35/100
Direzione di ricerca
Inizia da openapi_python_client/utils.py, intorno alla chiamata findall collegata, quindi segui i punti di ingresso della CLI generate e update. Riproduci la collisione con schema-underscore-collision.yaml e analizza i metodi to_dict e from_dict del modello generato. Il lavoro è concluso quando vengono generati identificatori Python validi e distinti per proprietà come a, a e a, senza campi o argomenti con nome duplicati.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Originally predicted in https://github.com/openapi-generators/openapi-python-client/issues/383#issuecomment-830839559
Since re.findall(rf"[^{DELIMITERS}]+", value) trims prefix and suffix _ characters while generating python property identifiers, 2+ schema properties on a single model that differ only by such underscores causes CLI generate and update commands to fail.
Given it would be problematic to carry through those untrimmed identifiers due to the semantic meaning of prefix and suffix _ on identifiers in python, it makes sense to have a fallback value to use like a title property or a configurable prefix.
Resulting error:
$ openapi-python-client generate --path schema-underscore-collision.yaml --fail-on-warning
Generating schema-underscore-collision-client
Error(s) encountered while generating, client was not created
black failed
reformatted schema_underscore_collision_client/api/__init__.py
reformatted schema_underscore_collision_client/__init__.py
reformatted schema_underscore_collision_client/types.py
error: cannot format schema_underscore_collision_client/models/get_response_200.py: cannot use --safe with this file; failed to parse source file AST: keyword argument repeated (<unknown>, line 55)
This could be caused by running Black with an older Python version that does not support new syntax used in your source file.
reformatted schema_underscore_collision_client/client.py
reformatted schema_underscore_collision_client/api/default/get.py
Oh no! 💥 💔 💥
5 files reformatted, 2 files left unchanged, 1 file failed to reformat.
Using an example schema-underscore-collision.yaml:
openapi: 3.0.2
info:
title: schema-underscore-collision
version: 1.0.0
paths:
/:
get:
description:
responses:
'200':
description: test
content:
application/json:
schema:
type: object
properties:
_a: {}
a: {}
a_: {}
The problematic schema_underscore_collision_client/models/get_response_200.py file, reported error is in the from_dict method but to_dict also suffers from the ambiguity:
from typing import Any, BinaryIO, Dict, List, Optional, TextIO, Tuple, Type, TypeVar, Union
import attr
from ..types import UNSET, Unset
T = TypeVar("T", bound="GetResponse200")
@attr.s(auto_attribs=True)
class GetResponse200:
"""
Attributes:
a (Union[Unset, Any]):
a (Union[Unset, Any]):
a (Union[Unset, Any]):
"""
a: Union[Unset, Any] = UNSET
a: Union[Unset, Any] = UNSET
a: Union[Unset, Any] = UNSET
additional_properties: Dict[str, Any] = attr.ib(init=False, factory=dict)
def to_dict(self) -> Dict[str, Any]:
a = self.a
a = self.a
a = self.a
field_dict: Dict[str, Any] = {}
field_dict.update(self.additional_properties)
field_dict.update({
})
if a is not UNSET:
field_dict["_a"] = a
if a is not UNSET:
field_dict["a"] = a
if a is not UNSET:
field_dict["a_"] = a
return field_dict
@classmethod
def from_dict(cls: Type[T], src_dict: Dict[str, Any]) -> T:
d = src_dict.copy()
a = d.pop("_a", UNSET)
a = d.pop("a", UNSET)
a = d.pop("a_", UNSET)
get_response_200 = cls(
a=a,
a=a,
a=a,
)
get_response_200.additional_properties = d
return get_response_200
@property
def additional_keys(self) -> List[str]:
return list(self.additional_properties.keys())
def __getitem__(self, key: str) -> Any:
return self.additional_properties[key]
def __setitem__(self, key: str, value: Any) -> None:
self.additional_properties[key] = value
def __delitem__(self, key: str) -> None:
del self.additional_properties[key]
def __contains__(self, key: str) -> bool:
return key in self.additional_properties
Versions
- Python:
3.7.12 - openapi-python-client:
0.11.1
- Lingua principale
- Python
- Stelle
- 2k
- Fork
- 293
- Merge medio
- 34m
- PR unite (30g)
- 1
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di openapi-generators/openapi-python-client
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 72/100
openapi-generators/openapi-python-client#1451 · 1 commento ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 52/100
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 64/100
openapi-generators/openapi-python-client#1435 · 1 commento ·
Tutte le issue di openapi-generators/openapi-python-client
Issue simili
-
link-check link-check:sphinx-theme
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
qgis/QGIS-Documentation#11275 ·
-
bug priority:normal ready-for-dev
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
OpenHands/extensions#626 · 1 commento ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 90/100
CSCfi/sd-search-api#39 ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 90/100