Continuando minha saga de bindings python para bibliotecas gobject, um dos problemas que tive nos bindings da ConIC e estou tendo no OSSO-Addressbook é que o h2def.py não estava gerando as definições de objeto para cada classe existente nelas. Ou seja, eu tinha que fazer tudo na mão.
Fuçando (de novo…) o código do h2defs.py, quando ele vai procurar definições de objetos ele usa procura logo estruturas (structs) que possam “parecer” com GObjects, adicionando a uma lista maybeobjects, e em seguida procura pelas estruturas de classe desses objetos (NomeDoObjetoClass). Caso encontre as estruturas de classe, o objeto é considerado um gobject e é adicionado na lista final.
Para achar as estruturas, ele usa 2 expressões regulares, uma para estruturas do tipo
struct _NomeDoObjeto{
ObjetoPai *parent;
...
e outra para estruturas do tipo:
typedef struct {
ObjetoPai *parent;
...
} NomeDoObjeto;
Ao achar uma ocorrência do padrão, maybeobjects recebia uma tupla com o nome do objeto e o nome do pai, que no segundo caso estava em ordem inversa do primeiro (primeiro o pai e depois o objeto).
O problema é que na hora de adicionar o seguindo tipo a maybeobjects, acontecia o seguinte:
maybeobjects.append((m.group(2), m.group(2))
Ou seja, o nome do objeto estava sendo adicionado duas vezes, ao invés do par correto. Bastou mudar para
maybeobjects.append((m.group(2), m.group(1))
E tudo fucionou…



