Skip to content

Bug: Valores NaN em colunas float causam erro de serialização JSON #175

Description

@glaubervila

Ao acessar o endpoint /api/metadata/user_tables/{id}/data/, tabelas que possuem
colunas do tipo float com valores NaN resultam em um erro 500 Internal Server Error.

ValueError: Out of range float values are not JSON compliant: nan

Reprodução

  1. Cadastrar uma tabela que contenha colunas float com valores NaN
  2. Fazer uma requisição GET /api/metadata/user_tables/{id}/data/?page=1&pageSize=50
  3. Observar o erro 500

Causa

Valores NaN, Infinity e -Infinity são válidos no padrão IEEE 754 (usado por
bancos de dados e pelo Python), mas não são permitidos pela especificação JSON.
O serializador padrão do Django REST Framework falha ao tentar converter esses valores.

Solução

Adicionado o método sanitize_rows em UserTableViewSet que percorre os dados em
um único loop recursivo e aplica todas as sanitizações necessárias antes da
serialização:

  • NaN, Infinity, -Infinitynull
  • Inteiros maiores que Number.MAX_SAFE_INTEGERstring (comportamento anterior
    do método convert_bigints_to_string, que foi removido e consolidado aqui)

O método é extensível: novas transformações podem ser adicionadas dentro do mesmo
loop sem custo adicional de iteração.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

Projects

Status
✅ Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions