0

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'}]

And it seems now that indeed the activity has been removed from the kratos # and MjWu

timeline, strange .. i tried this code earlier and it didn't seem to work

now .. that's strange, was there a change upstream?

  • can you include the response from APIs when you read the both timeline and user feeds (before you perform the delete)? – Tommaso Barbugli Aug 27 '18 at 08:01
  • @TommasoBarbugli In this – Jorge Perez Aug 28 '18 at 19:18
  • @TommasoBarbugli comments are char limited so I will try to add more details in an edit to my question .. altho it won't actually be an answer .. I tried adding an issue in github but it was closed because this stackoverflow question exits .. – Jorge Perez Aug 28 '18 at 19:27

0 Answers0