openapi-generators / openapi-generators/openapi-python-client
Bug Report: Incorrect Model Reference in Generated Paginated Envelope
Ninguém assumiu esta issue ainda.
- Linguagem predominante
- Python
- Estrelas
- 2k
- Forks
- 293
- Merge médio
- 34min
- PRs com merge (30d)
- 1
Descrição
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
Guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Direção de pesquisa
Comece com o schema.yaml fornecido e reproduza o comando de geração usando as duas definições de envelopes paginados. Inspecione o PaginatedTransactionEnvelope gerado e compare seu tipo de dados e suas importações de desserialização com o schema e com o envelope de customer gerado corretamente. Está concluído quando os dados da transação forem resolvidos para TransactionEntity sem o erro de status de CustomerEntity.
Escrita pelo modelo de indexação a partir do texto da issue.
Avaliação
- Stack de tecnologia
- python
- Domínio
- tooling
- Tipo de issue
- Bug
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Status de atividade
- Estagnada
- Clareza
- Razoavelmente clara
- Facilidade para iniciantes
- 45/100