Ошибка с Stream Framework

Я пытаюсь настроить основной канал:

from stream_framework.feeds.redis import RedisFeed

class PinFeed(RedisFeed):
    key_format = 'feed:normal:%(user_id)s'

class UserPinFeed(PinFeed):
    key_format = 'feed:user:%(user_id)s'


feed = UserPinFeed(13)

Но когда я бегу feed[:2] после добавления одного действия я получаю эту ошибку:

<ipython-input-25-41b7cd0d0d8c> in <module>()
----> 1 feed[:2]

/Users/home/venv/lib/python2.7/site-packages/stream_framework/feeds/base.pyc in __getitem__(self, k)
    303         try:
    304             results = self.get_activity_slice(
--> 305                 start, bound)
    306         except StopIteration:
    307             # There's nothing left, even though the bound is higher.

/Users/home/venv/lib/python2.7/site-packages/stream_framework/feeds/base.pyc in get_activity_slice(self, start, stop, rehydrate)
    354         print 'line 350'
    355         if self.needs_hydration(activities) and rehydrate:
--> 356             activities = self.hydrate_activities(activities)
    357         return activities
    358

/Users/home/venv/lib/python2.7/site-packages/stream_framework/feeds/base.pyc in hydrate_activities(self, activities)
    332         activity_data = {a.serialization_id: a for a in activity_list}
    333         print activity_data
--> 334         return [activity.get_hydrated(activity_data) for activity in activities]
    335
    336     def needs_hydration(self, activities):

/Users/home/venv/lib/python2.7/site-packages/stream_framework/activity.pyc in get_hydrated(self, activities)
     42
     43         '''
---> 44         activity = activities[int(self.serialization_id)]
     45         activity.dehydrated = False
     46         return activity

KeyError: 14929294667170000000001005L

Я могу распечатать [<stream_framework.activity.DehydratedActivity object at 0x10e114e90>] а также [u'14929294667170000000001005'],

Любая подсказка, что может быть причиной этого?

1 ответ

Решение

Здесь несоответствие типов между ключом, показанным в KeyError трассировка стека и печатное представление [u'14929294667170000000001005']

u'14929294667170000000001005' является строкой Unicode в то время как 14929294667170000000001005L это long введите целое число

Либо сам Ключ, либо значение, которое вы пытаетесь использовать в качестве ключа поиска, придется изменить, чтобы типы были идентичными. Обратите внимание, что int с или без суффикса L (означающий long тип) будет работать, чтобы получить значение из питона dict, Простая демонстрация:

>>> D = {14929294667170000000001005 : 'some value'}
>>> D[14929294667170000000001005]
'some value'
>>> D[14929294667170000000001005L]
'some value'
Другие вопросы по тегам