I have a panel model with an Activity mixin to tie in to the GetStream system. Each of this panels can be edited and there can be comments added to this panels. When either of this activities takes place, I would like to push this activity to the top of all feeds that are subscribed to the actors feed. I was told that there was no way to update the activity time because the time id pair is the way that GetStream makes activities unique, so I was told to accomplish what we want to accomplish we may remove the activity from the main feed than add it back in with the updated time of the activity I will achieve the desired result. So I have tried to start of by removing the activity from the main feed, as this is vague I assume .. and correct me if im wrong, that it is the actors user feed so this is the code I tried from the console. But first you should see what the timeline looks like from another users feed
{
currentTimeline(number: 3) {
token
foreignId
time
subject {
... on PanelType {
author {
id
username
}
}
}
}
}
{
"data": {
"currentTimeline": [
{
"token": "9d5b5e4e-95a3-11e8-8080-8000728c3d55",
"foreignId": "stream_panel.Panel:72",
"time": "2018-08-01 15:57:38.701883",
"subject": {
"author": {
"id": "VXNlclR5cGU6ODA=",
"username": "KratosMars"
}
}
},
{
"token": "4fb282f2-9531-11e8-8080-8000086cd76c",
"foreignId": "stream_panel.Panel:71",
"time": "2018-08-01 02:19:25.783525",
"subject": {
"author": {
"id": "VXNlclR5cGU6NQ==",
"username": "MjWu"
}
}
},
{
"token": "ff63638c-9514-11e8-8080-800121e06ea4",
"foreignId": "stream_panel.Panel:70",
"time": "2018-07-31 22:56:45.138830",
"subject": {
"author": {
"id": "VXNlclR5cGU6NA==",
"username": "BensonMwangi"
}
}
}
]
}
}
Here I will try to remove activity 'stream_panel.Panel:70'
from all streams by removing it from the actor user stream by the username BensonMwangi
In [1]: from stream_django.feed_manager import feed_manager
In [1]: from stream_django.feed_manager import feed_manager
In [2]: from medicalboard.stream_panel.models import Panel
In [3]: removeP = Panel.objects.get(pk=70)
In [4]: removeP
Out[4]: <Panel: post id:70 , created by benson.mwangi@gmail.com>
In [5]: actorFeedname = feed_manager.get_actor_feed(removeP)
In [6]: actorFeedname
Out[6]: 'user'
In [7]: user_feed = feed_manager.get_user_feed(removeP.author.pk)
In [8]: user_feed
Out[8]: <stream.feed.Feed at 0x7f766b965c50>
In [9]: user_feed.remove_activity(foreign_id='stream_panel.Panel:{}'.format(removeP.pk))
Out[9]: {u'duration': u'12.68ms', u'removed': u'stream_panel.Panel:70'}
But that does not seem to remove the activity from the timeline feed for other users
timeline = feed_manager.get_news_feeds(user.id)['timeline']
Ok This is a Requested re-attempt with more details
In this example i will attempt to remove "foreignId": "stream_panel.Panel:105"
activity from the owner user pk 5 user feed to make sure that it isnt visible in
the user kratos timeline
first here is what the timeline looks like now for user kratos
In [1]: from stream_django.feed_manager import feed_manager
In [2]: from app.models import User
In [3]: u1 = User.objects.filter(username__icontains="kratos")
In [4]: u1
Out[4]: <QuerySet [<User: kratos@welnity.com>]>
In [5]: u1 = u1[0]
In [6]: timeline = feed_manager.get_news_feeds(u1.id)['timeline']
In [7]: activities = timeline.get(limit=5, id_lt=None)['results']
In [8]: activities
Out[8]:
[{u'actor': u'app.User:5',
u'foreign_id': u'stream_panel.Panel:105',
u'id': u'3cd539c8-a638-11e8-8080-8000583b36e6',
u'object': u'stream_panel.Panel:105',
u'origin': u'user:5',
u'target': u'',
u'time': datetime.datetime(2018, 8, 22, 18, 21, 50, 378644),
u'verb': u'panel'},
{u'actor': u'app.User:4',
u'foreign_id': u'stream_panel.Panel:104',
u'id': u'5e9799ea-a636-11e8-8080-800178713625',
u'object': u'stream_panel.Panel:104',
u'origin': u'user:4',
u'target': u'',
u'time': datetime.datetime(2018, 8, 22, 18, 8, 28, 23857),
u'verb': u'panel'},
{u'actor': u'app.User:4',
u'foreign_id': u'stream_panel.Panel:103',
u'id': u'274e6b94-a627-11e8-8080-80001b521123',
u'object': u'stream_panel.Panel:103',
u'origin': u'user:4',
u'target': u'',
u'time': datetime.datetime(2018, 8, 22, 16, 19, 32, 818626),
u'verb': u'panel'},
{u'actor': u'app.User:5',
u'foreign_id': u'stream_panel.Panel:102',
u'id': u'bf6da0a4-a607-11e8-8080-800148ee0adf',
u'object': u'stream_panel.Panel:102',
u'origin': u'user:5',
u'target': u'',
u'time': datetime.datetime(2018, 8, 22, 12, 34, 44, 141482),
u'verb': u'panel'},
{u'actor': u'app.User:80',
u'foreign_id': u'stream_panel.Panel:101',
u'id': u'5a6dd0de-a567-11e8-8080-80003177b02e',
u'object': u'stream_panel.Panel:101',
u'origin': u'user:80',
u'target': u'',
u'time': datetime.datetime(2018, 8, 21, 17, 26, 35, 216099),
u'verb': u'panel'}]
In [9]:
And the timeline feed from user pk 5 "username": "MjWu",
In [9]: u2 = User.objects.get(pk=5)
In [10]: timeline = feed_manager.get_news_feeds(u2.id)['timeline']
In [11]: activities = timeline.get(limit=5, id_lt=None)['results']
In [12]:
In [12]: activities
Out[12]:
[{u'actor': u'app.User:5',
u'foreign_id': u'stream_panel.Panel:105',
u'id': u'3cd539c8-a638-11e8-8080-8000583b36e6',
u'object': u'stream_panel.Panel:105',
u'origin': None,
u'target': u'',
u'time': datetime.datetime(2018, 8, 22, 18, 21, 50, 378644),
u'verb': u'panel'},
{u'actor': u'app.User:4',
u'foreign_id': u'stream_panel.Panel:104',
u'id': u'5e9799ea-a636-11e8-8080-800178713625',
u'object': u'stream_panel.Panel:104',
u'origin': u'user:4',
u'target': u'',
u'time': datetime.datetime(2018, 8, 22, 18, 8, 28, 23857),
u'verb': u'panel'},
{u'actor': u'app.User:4',
u'foreign_id': u'stream_panel.Panel:103',
u'id': u'274e6b94-a627-11e8-8080-80001b521123',
u'object': u'stream_panel.Panel:103',
u'origin': u'user:4',
u'target': u'',
u'time': datetime.datetime(2018, 8, 22, 16, 19, 32, 818626),
u'verb': u'panel'},
{u'actor': u'app.User:5',
u'foreign_id': u'stream_panel.Panel:102',
u'id': u'bf6da0a4-a607-11e8-8080-800148ee0adf',
u'object': u'stream_panel.Panel:102',
u'origin': None,
u'target': u'',
u'time': datetime.datetime(2018, 8, 22, 12, 34, 44, 141482),
u'verb': u'panel'},
{u'actor': u'app.User:80',
u'foreign_id': u'stream_panel.Panel:101',
u'id': u'5a6dd0de-a567-11e8-8080-80003177b02e',
u'object': u'stream_panel.Panel:101',
u'origin': u'user:80',
u'target': u'',
u'time': datetime.datetime(2018, 8, 21, 17, 26, 35, 216099),
u'verb': u'panel'}]
Now for the user feed for user kratos
In [13]: user_feed = feed_manager.get_user_feed(u1.pk)
In [14]: user_feed
Out[14]: <stream.feed.Feed at 0x7f56d815f610>
In [15]: user_feed.get(limit=5)
Out[15]:
{u'duration': u'10.43ms',
u'next': u'/api/v1.0/feed/user/80/?api_key=pkkjwzrreazf&id_lt=362625ea-a563-11e8-8080-8001345e1c74&limit=5',
u'results': [{u'actor': u'app.User:80',
u'foreign_id': u'stream_panel.Panel:101',
u'id': u'5a6dd0de-a567-11e8-8080-80003177b02e',
u'object': u'stream_panel.Panel:101',
u'origin': None,
u'target': u'',
u'time': datetime.datetime(2018, 8, 21, 17, 26, 35, 216099),
u'to': [u'timeline:80'],
u'verb': u'panel'},
{u'actor': u'app.User:80',
u'foreign_id': u'stream_panel.Panel:100',
u'id': u'f13bb4a0-a566-11e8-8080-80012beefbd8',
u'object': u'stream_panel.Panel:100',
u'origin': None,
u'target': u'',
u'time': datetime.datetime(2018, 8, 21, 17, 23, 38, 726928),
u'to': [u'timeline:80'],
u'verb': u'panel'},
{u'actor': u'app.User:80',
u'foreign_id': u'stream_panel.Panel:99',
u'id': u'94ed2798-a565-11e8-8080-80006695dd8b',
u'object': u'stream_panel.Panel:99',
u'origin': None,
u'target': u'',
u'time': datetime.datetime(2018, 8, 21, 17, 13, 54, 365020),
u'to': [u'timeline:80'],
u'verb': u'panel'},
{u'actor': u'app.User:80',
u'foreign_id': u'stream_panel.Panel:98',
u'id': u'd362aaf4-a563-11e8-8080-80007fe8b546',
u'object': u'stream_panel.Panel:98',
u'origin': None,
u'target': u'',
u'time': datetime.datetime(2018, 8, 21, 17, 1, 20, 160434),
u'to': [u'timeline:80'],
u'verb': u'panel'},
{u'actor': u'app.User:80',
u'foreign_id': u'stream_panel.Panel:97',
u'id': u'362625ea-a563-11e8-8080-8001345e1c74',
u'object': u'stream_panel.Panel:97',
u'origin': None,
u'target': u'',
u'time': datetime.datetime(2018, 8, 21, 16, 56, 56, 361521),
u'to': [u'timeline:80'],
u'verb': u'panel'}]}
Now for the user feed for user pk 5 aka MjWu
In [16]: user_feed = feed_manager.get_user_feed(u2.pk)
In [17]: user_feed.get(limit=5)
Out[17]:
{u'duration': u'50.55ms',
u'next': u'/api/v1.0/feed/user/5/?api_key=pkkjwzrreazf&id_lt=d2cf1cd4-a50f-11e8-8080-800123783518&limit=5',
u'results': [{u'actor': u'app.User:5',
u'foreign_id': u'stream_panel.Panel:105',
u'id': u'3cd539c8-a638-11e8-8080-8000583b36e6',
u'object': u'stream_panel.Panel:105',
u'origin': None,
u'target': u'',
u'time': datetime.datetime(2018, 8, 22, 18, 21, 50, 378644),
u'to': [u'timeline:5'],
u'verb': u'panel'},
{u'actor': u'app.User:5',
u'foreign_id': u'stream_panel.Panel:102',
u'id': u'bf6da0a4-a607-11e8-8080-800148ee0adf',
u'object': u'stream_panel.Panel:102',
u'origin': None,
u'target': u'',
u'time': datetime.datetime(2018, 8, 22, 12, 34, 44, 141482),
u'to': [u'timeline:5'],
u'verb': u'panel'},
{u'actor': u'app.User:5',
u'foreign_id': u'stream_panel.Panel:82',
u'id': u'637697a8-a53d-11e8-8080-800146307a71',
u'object': u'stream_panel.Panel:82',
u'origin': None,
u'target': u'',
u'time': datetime.datetime(2018, 8, 21, 12, 26, 11, 510468),
u'to': [u'timeline:5'],
u'verb': u'panel'},
{u'actor': u'app.User:5',
u'foreign_id': u'stream_panel.Panel:81',
u'id': u'45a9fcd8-a53d-11e8-8080-80012cf89374',
u'object': u'stream_panel.Panel:81',
u'origin': None,
u'target': u'',
u'time': datetime.datetime(2018, 8, 21, 12, 25, 21, 515644),
u'to': [u'timeline:5'],
u'verb': u'panel'},
{u'actor': u'app.User:5',
u'foreign_id': u'stream_panel.Panel:79',
u'id': u'd2cf1cd4-a50f-11e8-8080-800123783518',
u'object': u'stream_panel.Panel:79',
u'origin': None,
u'target': u'',
u'time': datetime.datetime(2018, 8, 21, 7, 0, 1, 468130),
u'to': [u'timeline:5'],
u'verb': u'panel'}]}
Now for the changes, I will remove one activity by this ids
# u'foreign_id': u'stream_panel.Panel:105',
# u'id': u'3cd539c8-a638-11e8-8080-8000583b36e6',
I notice that the activity is indeed removed from the user by pk 5 user_feed
In [18]: user_feed = feed_manager.get_user_feed(u2.pk)
In [19]: user_feed.remove_activity(foreign_id='stream_panel.Panel:{}'.format(105))
Out[19]: {u'duration': u'12.08ms', u'removed': u'stream_panel.Panel:105'}
In [20]: user_feed.get(limit=5)
Out[20]:
{u'duration': u'8.56ms',
u'next': u'/api/v1.0/feed/user/5/?api_key=pkkjwzrreazf&id_lt=c2a6aa3e-a50f-11e8-8080-800014c868b2&limit=5',
u'results': [{u'actor': u'app.User:5',
u'foreign_id': u'stream_panel.Panel:102',
u'id': u'bf6da0a4-a607-11e8-8080-800148ee0adf',
u'object': u'stream_panel.Panel:102',
u'origin': None,
u'target': u'',
u'time': datetime.datetime(2018, 8, 22, 12, 34, 44, 141482),
u'to': [u'timeline:5'],
u'verb': u'panel'},
{u'actor': u'app.User:5',
u'foreign_id': u'stream_panel.Panel:82',
u'id': u'637697a8-a53d-11e8-8080-800146307a71',
u'object': u'stream_panel.Panel:82',
u'origin': None,
u'target': u'',
u'time': datetime.datetime(2018, 8, 21, 12, 26, 11, 510468),
u'to': [u'timeline:5'],
u'verb': u'panel'},
{u'actor': u'app.User:5',
u'foreign_id': u'stream_panel.Panel:81',
u'id': u'45a9fcd8-a53d-11e8-8080-80012cf89374',
u'object': u'stream_panel.Panel:81',
u'origin': None,
u'target': u'',
u'time': datetime.datetime(2018, 8, 21, 12, 25, 21, 515644),
u'to': [u'timeline:5'],
u'verb': u'panel'},
{u'actor': u'app.User:5',
u'foreign_id': u'stream_panel.Panel:79',
u'id': u'd2cf1cd4-a50f-11e8-8080-800123783518',
u'object': u'stream_panel.Panel:79',
u'origin': None,
u'target': u'',
u'time': datetime.datetime(2018, 8, 21, 7, 0, 1, 468130),
u'to': [u'timeline:5'],
u'verb': u'panel'},
{u'actor': u'app.User:5',
u'foreign_id': u'stream_panel.Panel:78',
u'id': u'c2a6aa3e-a50f-11e8-8080-800014c868b2',
u'object': u'stream_panel.Panel:78',
u'origin': None,
u'target': u'',
u'time': datetime.datetime(2018, 8, 21, 6, 59, 34, 359507),
u'to': [u'timeline:5'],
u'verb': u'panel'}]}
Now to check if the activity has been removed from the timeline feeds
for both kratos and user pk 5
aka MjWu
first for kratos
In [21]: timeline = feed_manager.get_news_feeds(u1.id)['timeline']
In [22]: activities = timeline.get(limit=5, id_lt=None)['results']
In [23]: activities
Out[23]:
[{u'actor': u'app.User:4',
u'foreign_id': u'stream_panel.Panel:104',
u'id': u'5e9799ea-a636-11e8-8080-800178713625',
u'object': u'stream_panel.Panel:104',
u'origin': u'user:4',
u'target': u'',
u'time': datetime.datetime(2018, 8, 22, 18, 8, 28, 23857),
u'verb': u'panel'},
{u'actor': u'app.User:4',
u'foreign_id': u'stream_panel.Panel:103',
u'id': u'274e6b94-a627-11e8-8080-80001b521123',
u'object': u'stream_panel.Panel:103',
u'origin': u'user:4',
u'target': u'',
u'time': datetime.datetime(2018, 8, 22, 16, 19, 32, 818626),
u'verb': u'panel'},
{u'actor': u'app.User:5',
u'foreign_id': u'stream_panel.Panel:102',
u'id': u'bf6da0a4-a607-11e8-8080-800148ee0adf',
u'object': u'stream_panel.Panel:102',
u'origin': u'user:5',
u'target': u'',
u'time': datetime.datetime(2018, 8, 22, 12, 34, 44, 141482),
u'verb': u'panel'},
{u'actor': u'app.User:80',
u'foreign_id': u'stream_panel.Panel:101',
u'id': u'5a6dd0de-a567-11e8-8080-80003177b02e',
u'object': u'stream_panel.Panel:101',
u'origin': u'user:80',
u'target': u'',
u'time': datetime.datetime(2018, 8, 21, 17, 26, 35, 216099),
u'verb': u'panel'},
{u'actor': u'app.User:80',
u'foreign_id': u'stream_panel.Panel:100',
u'id': u'f13bb4a0-a566-11e8-8080-80012beefbd8',
u'object': u'stream_panel.Panel:100',
u'origin': u'user:80',
u'target': u'',
u'time': datetime.datetime(2018, 8, 21, 17, 23, 38, 726928),
u'verb': u'panel'}]
And now the timeline for user pk 5 aka MjWu
In [27]: u2
Out[27]: <User: monjuwu@gmail.com>
In [28]: timeline = feed_manager.get_news_feeds(u2.id)['timeline']
In [29]: activities = timeline.get(limit=5, id_lt=None)['results']
In [30]: activities
Out[30]:
[{u'actor': u'app.User:4',
u'foreign_id': u'stream_panel.Panel:104',
u'id': u'5e9799ea-a636-11e8-8080-800178713625',
u'object': u'stream_panel.Panel:104',
u'origin': u'user:4',
u'target': u'',
u'time': datetime.datetime(2018, 8, 22, 18, 8, 28, 23857),
u'verb': u'panel'},
{u'actor': u'app.User:4',
u'foreign_id': u'stream_panel.Panel:103',
u'id': u'274e6b94-a627-11e8-8080-80001b521123',
u'object': u'stream_panel.Panel:103',
u'origin': u'user:4',
u'target': u'',
u'time': datetime.datetime(2018, 8, 22, 16, 19, 32, 818626),
u'verb': u'panel'},
{u'actor': u'app.User:5',
u'foreign_id': u'stream_panel.Panel:102',
u'id': u'bf6da0a4-a607-11e8-8080-800148ee0adf',
u'object': u'stream_panel.Panel:102',
u'origin': None,
u'target': u'',
u'time': datetime.datetime(2018, 8, 22, 12, 34, 44, 141482),
u'verb': u'panel'},
{u'actor': u'app.User:80',
u'foreign_id': u'stream_panel.Panel:101',
u'id': u'5a6dd0de-a567-11e8-8080-80003177b02e',
u'object': u'stream_panel.Panel:101',
u'origin': u'user:80',
u'target': u'',
u'time': datetime.datetime(2018, 8, 21, 17, 26, 35, 216099),
u'verb': u'panel'},
{u'actor': u'app.User:80',
u'foreign_id': u'stream_panel.Panel:100',
u'id': u'f13bb4a0-a566-11e8-8080-80012beefbd8',
u'object': u'stream_panel.Panel:100',
u'origin': u'user:80',
u'target': u'',
u'time': datetime.datetime(2018, 8, 21, 17, 23, 38, 726928),
u'verb': u'panel'}]