openapi-generators / openapi-generators/openapi-python-client
Bug Report: Incorrect Model Reference in Generated Paginated Envelope
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Python
- Estrellas
- 2k
- Forks
- 293
- Merge medio
- 34 min
- PR fusionados (30 d)
- 1
Descripción
Bug Report: Incorrect Model Reference in Generated Paginated Envelope
Summary
openapi-python-client incorrectly generates PaginatedTransactionEnvelope with CustomerEntity instead of TransactionEntity, despite the OpenAPI schema correctly specifying TransactionEntity.
Environment
- openapi-python-client version: 0.28.1
- Python version: 3.13
- Generation command:
openapi-python-client generate \ --path schema.yaml \ --output-path ./generated \ --meta none
Expected Behavior
The generated PaginatedTransactionEnvelope should use TransactionEntity based on this schema definition:
PaginatedTransactionEnvelope:
allOf:
- $ref: '#/components/schemas/PaginatedSuccessEnvelope'
- type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/TransactionEntity'
Expected generated code:
if TYPE_CHECKING:
from ..models.transaction_entity import TransactionEntity
from ..models.links import Links
@_attrs_define
class PaginatedTransactionEnvelope:
timestamp: datetime.datetime
path: str
data: list[TransactionEntity] # ✓ Correct
links: Links
Actual Behavior
The generator produces code using CustomerEntity instead:
if TYPE_CHECKING:
from ..models.customer_entity import CustomerEntity # ✗ Wrong!
from ..models.links import Links
@_attrs_define
class PaginatedTransactionEnvelope:
timestamp: datetime.datetime
path: str
data: list[CustomerEntity] # ✗ Wrong!
links: Links
@classmethod
def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
from ..models.customer_entity import CustomerEntity # ✗ Wrong!
from ..models.links import Links
# ...
for data_item_data in _data:
data_item = CustomerEntity.from_dict(data_item_data) # ✗ Wrong!
data.append(data_item)
Impact
This causes runtime errors when parsing API responses:
ValueError: 'failed' is not a valid CustomerEntityStatus
The parser attempts to deserialize transaction data as customer data, failing when transaction-specific status values don't exist in the CustomerEntityStatus enum.
Additional Context
The schema also defines PaginatedCustomerEnvelope (which correctly uses CustomerEntity). The generator may be incorrectly reusing or caching the entity type across similar paginated envelope structures.
Related schema definitions:
PaginatedCustomerEnvelope:
allOf:
- $ref: '#/components/schemas/PaginatedSuccessEnvelope'
- type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/CustomerEntity'
PaginatedTransactionEnvelope:
allOf:
- $ref: '#/components/schemas/PaginatedSuccessEnvelope'
- type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/TransactionEntity'
Workaround
We've added a post-generation fix script:
sed -i '' 's/from ..models.customer_entity import CustomerEntity/from ..models.transaction_entity import TransactionEntity/g' "$FILE"
sed -i '' 's/list\[CustomerEntity\]/list[TransactionEntity]/g' "$FILE"
sed -i '' 's/CustomerEntity\.from_dict/TransactionEntity.from_dict/g' "$FILE"
Reproduction
The issue appears when:
- Multiple paginated envelopes are defined using
allOfwith shared base schemas - Each envelope should use different entity types in the
dataarray - The generator confuses the entity types between envelopes
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.
Línea de trabajo
Comienza con el schema.yaml proporcionado y reproduce el comando de generación utilizando las dos definiciones de envolventes paginadas. Inspecciona el PaginatedTransactionEnvelope generado y compara su tipo de datos y sus importaciones de deserialización con el esquema y con la envolvente de customer generada correctamente. La tarea estará terminada cuando los datos de transacción se resuelvan como TransactionEntity sin el error de estado de CustomerEntity.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python
- Área
- tooling
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 45/100