Python 使用流框架为用户创建活动
我正在尝试设置流框架,而不是更新的。我已经正确地设置了Redis服务器和环境,我面临的问题是为用户创建活动 我一直在尝试创建活动,但它给了我一条错误消息,如下所示:Python 使用流框架为用户创建活动,python,redis,stream-framework,Python,Redis,Stream Framework,我正在尝试设置流框架,而不是更新的。我已经正确地设置了Redis服务器和环境,我面临的问题是为用户创建活动 我一直在尝试创建活动,但它给了我一条错误消息,如下所示: 。。。 文件“/Users/../stream\u framework/activity.py”,第110行,序列化\u id 如果self.object\u id>=10**10或self.verb.id>=10**3: AttributeError:“int”对象没有属性“id” 这是密码 我认为文档中缺少了一些东西,或者我做
。。。
文件“/Users/../stream\u framework/activity.py”,第110行,序列化\u id
如果self.object\u id>=10**10或self.verb.id>=10**3:
AttributeError:“int”对象没有属性“id”
这是密码
我认为文档中缺少了一些东西,或者我做错了什么。如果有人能帮助我使流框架正常工作,我将不胜感激。文档不一致。传递给活动的
动词
应该是的子类(一个?*)。退房并离开
以下内容将修复您发布的错误:
来自stream\u framework.activity导入活动
从stream_framework.feeds.redis导入RedisFeed
从stream_framework.verbs导入寄存器
从stream_framework.verbs.base导入谓词
类PinFeed(RedisFeed):
key\u format='feed:normal:%(用户id)s'
类UserPinFeed(PinFeed):
key\u format='feed:user:%(user\u id)s'
类别针(动词):
id=5
不定式='pin'
过去时='pinted'
寄存器(Pin)
feed=UserPinFeed(13)
活动=活动(
演员=13,
动词=别针,
对象=1,
)
feed.add(活动)
我很快地浏览了一下,它看起来像是为actor
和object
传递int
s应该可以工作。但是,这些参数也可能在文档中过时
*测试以
动词的形式在类中通过。但是,动词
基类具有方法serialize
和\uuuu str\uuuu
,只有当您拥有此类的对象时才能有意义地调用这些方法。所以我仍然不确定这里需要什么。在当前状态下,框架似乎从未调用这些方法,因此类仍然可以工作,但我觉得作者最初打算传递实例。在great by的帮助下,我能够部分解决它。由于不再维护该包,该包将安装最新的Redis client for python,这会产生太多问题,因此通过安装(如果使用stream-framework-1.3.7),应该可以修复该问题
我还想添加一个完整的指南,以正确地向用户提要添加活动
要点:
- 如果未使用,请确保先插入活动,然后再使用
feed.insert\u activity(activity)
方法将其添加到用户
- 如果使用
feed[:]
获取feed,会抛出如下错误:
文件“/Users/../stream\u framework/activity.py”,第44行,在get\u-hydrated中
活动=活动[int(self.serialization\u id)]
密钥错误:16223026351730000000001005L
然后,您需要使用密钥格式为该用户清除数据。在我的情况下,密钥是feed:user:13
对于用户13,使用DEL feed:user:13
删除它,如果这不能解决问题,那么您可以FLUSHALL
,这将删除Redis中的所有内容
示例代码:
来自stream\u framework.activity导入活动
从stream_framework.feeds.redis导入RedisFeed
从stream_framework.verbs导入寄存器
从stream_framework.verbs.base导入谓词
类PinFeed(RedisFeed):
key\u format='feed:normal:%(用户id)s'
类UserPinFeed(PinFeed):
key\u format='feed:user:%(user\u id)s'
类别针(动词):
id=5
不定式='pin'
过去时='pinted'
寄存器(Pin)
feed=UserPinFeed(13)
打印(提要[:])
活动=活动(
演员=13,
动词=别针,
对象=1)
feed.insert_活动(活动)
活动\u id=feed.add(活动)
打印(活动标识)
打印(提要[:])
你没有错,但问题出在演员身上,你的代码给了我同样的错误。请尝试运行您的代码,或者它是否适用于您?。ThanksI无法测试我的代码,因为我既没有安装stream\u框架
,也没有安装redis。您发布的最初错误是活动无法访问动词.id
,现在您说错误与参与者有关。你能把修正动词后出现的错误添加到你的问题中吗?安装起来很简单。。。此外,发布一个你自己不知道是否有效的答案也是一种不好的做法。感谢分享,我已经测试了你的代码,我认为我已经发现了问题的主要问题,你的代码确实是正确的。经过彻底调查后,我会分享同样的东西。
from stream_framework.activity import Activity
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)
print(feed)
activity = Activity(
actor=13, # Thierry's user id
verb=1, # The id associated with the Pin verb
object=1, # The id of the newly created Pin object
)
feed.add(activity) # Error at this line