Skip to content

[BUG] ABC GenericStaticABC.extract declara assinatura posicional mas plugins implementam **kwargs (contrato não enforced) #8

@giovanniacg

Description

@giovanniacg

Descreva o bug

A classe abstrata GenericStaticABC em genericparser/plugins/domain/generic_class.py:8 declara o método abstrato como:

def extract(self, kwargs):  # parâmetro posicional chamado 'kwargs'

Porém, ambos os plugins implementam com keyword-args:

# plugins/statics/sonarqube.py
def extract(self, **kwargs):  # ** (kwargs reais)

Resultado: o ABC não força a assinatura correta. Plugin que herde de GenericStaticABC e implemente exatamente como o ABC (def extract(self, kwargs)) vai quebrar quando chamado com keyword args. Plugins existentes funcionam por terem ignorado o ABC.

Risco: novo plugin escrito seguindo a assinatura do ABC vai quebrar; plugin antigo continua funcionando por acidente.

Como reproduzir

from genericparser.plugins.domain.generic_class import GenericStaticABC

class MeuPlugin(GenericStaticABC):
    def extract(self, kwargs):  # como o ABC declara
        return kwargs

# Quando chamado pelo orquestrador via parser(input_value=...):
plugin = MeuPlugin()
plugin.extract(input_value="x")  # TypeError: extract() got unexpected keyword argument 'input_value'

Comportamento esperado

Decidir o contrato e padronizar:

Opção A (recomendada): mudar o ABC para def extract(self, **kwargs) — alinha com plugins existentes.

@abstractmethod
def extract(self, **kwargs):
    raise NotImplementedError

Opção B: corrigir os plugins para def extract(self, kwargs) — mas isso quebra qualquer chamada externa que passe kwargs nomeados.

Adicionar teste que instancia subclasse mínima do ABC e chama extract(...) com a assinatura padrão dos plugins existentes.

Informações adicionais

  • ABC: genericparser/plugins/domain/generic_class.py:8
  • Plugins: genericparser/plugins/statics/sonarqube.py, genericparser/plugins/dinamic/github.py
  • Achado durante auditoria sistemática do Giovanni pelos repositórios em 2026-05-04.

Metadata

Metadata

Labels

bugSomething isn't working

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions