gdata AttributeError: объект «ContactEntry» не имеет атрибута «имя»

Использование библиотек GData Python, версия 2.0.18

Попытка получить список контактов с использованием подхода службы (а не клиента, как в примере приложения). Похоже, что возврат сопоставлен с ContactEntry (хорошо), но выдает ошибку, когда я пытаюсь получить доступ к атрибуту имени:

AttributeError: объект «ContactEntry» не имеет атрибута «имя»

from gdata.contacts.service import ContactsService
(...)
        self.client = ContactsService(source='appname', additional_headers=additional_headers )
        feed = self.client.GetContactsFeed(uri=query.ToUri())

self.client — это gdata.contacts.service

GetContactsFeed использует

def GetContactsFeed(self, uri=None):
    uri = uri or self.GetFeedUri()
    return self.Get(uri, converter=gdata.contacts.ContactsFeedFromString)

В примере кода используется desired_class=gdata.contacts.data.ContactsFeed

Кажется, должен быть атрибут имени. Мой синтаксис неверен?


person user2887965    schedule 16.10.2013    source источник
comment
Предоставьте краткий, автономный, правильный пример и полную трассировку.   -  person zero323    schedule 17.10.2013


Ответы (1)


Хорошо, вот проблема для примера контактов python по сравнению с моей реализацией: в gdata/sample/contacts/contacts_example.py он использует gdata.contacts.Client, который (длинная цепочка к нему) вызывает классы атомов для использования desired_class=gdata.contacts.data.ContactsFeed. Служба, как указано в вопросе, использует converter=gdata.contacts.ContactsFeedFromString.
Этот преобразователь исходит из файла инициализации, src/gdata/contacts/init.py, как и определения классов. Очевидно, что на данный момент вы знаете, что произойдет — классы для xml в инициализаторе не совпадают с классами в файле данных. Я добавил эти отсутствующие, неправильные в инициализатор, и все заработало, как и ожидалось. В качестве альтернативы, изменение на использование требуемого_класса также сделает это (в какой-то момент вам придется сопоставить конвертер... не поддерживается непосредственно в service.py) или добавить конвертер в data.ContactsFeed и т. д.

Надеюсь, это поможет кому-то.

person user2887965    schedule 17.10.2013