Beispiel #1
0
    def test_parse_data(self):

        act = Activity({"id": 5, "verb": "post", \
            "actor": {"objectType": "actor", "id": 1232, "published": '2012-07-05T12:00:00Z'}, \
            "target": {"objectType": "target", "id": 4325, "published": '2012-07-05T12:00:00Z'}, \
            "object": {"objectType": "something", "id": 4353, "published": '2012-07-05T12:00:00Z'},
            "icon": {'url': "http://example.org/something"}}, backend=MagicMock())

        act_dict = act.parse_data(act._dict)

        eq_(
            {
                'target': {
                    'objectType': 'target',
                    'id': 4325,
                    'published': '2012-07-05T12:00:00Z'
                },
                'object': {
                    'objectType': 'something',
                    'id': 4353,
                    'published': '2012-07-05T12:00:00Z'
                },
                'actor': {
                    'objectType': 'actor',
                    'id': 1232,
                    'published': '2012-07-05T12:00:00Z'
                },
                'verb': 'post',
                'id': '5',
                'icon': {
                    'url': 'http://example.org/something'
                }
            }, act_dict)
Beispiel #2
0
    def sub_activity_create(self,
                            activity,
                            actor,
                            content,
                            extra={},
                            sub_activity_verb="",
                            **kwargs):
        sub_activity_model = SUB_ACTIVITY_MAP[sub_activity_verb.lower()][0]
        sub_activity_attribute = SUB_ACTIVITY_MAP[sub_activity_verb.lower()][1]
        object_type = kwargs.get('object_type', sub_activity_verb)

        activity_id = self._extract_id(activity)
        activity_model = Activity(self._activities.get(key=activity_id).data,
                                  backend=self)

        sub_activity_obj, original_activity_obj = activity_model\
            .get_parsed_sub_activity_dict(
                actor=actor, content=content, verb=sub_activity_verb,
                object_type=object_type, collection=sub_activity_attribute,
                activity_class=sub_activity_model, extra=extra)

        sub_activity_obj = self.create_activity(
            sub_activity_obj, activity_id=original_activity_obj['id'])

        original_activity_obj[sub_activity_attribute]['items'][0][
            'actor'] = sub_activity_obj['actor']['id']
        original_activity_obj[sub_activity_attribute]['items'][0][
            'id'] = sub_activity_obj['id']
        original_activity_obj[sub_activity_attribute]['items'][0][
            'published'] = sub_activity_obj['published']
        original_activity_obj[sub_activity_attribute]['items'][0]['object'][
            'id'] = sub_activity_obj['id']
        original_activity_obj = self.activity_update(original_activity_obj)

        return sub_activity_obj, original_activity_obj
Beispiel #3
0
    def test_initialize_with_audience_targeting(self):
        act = Activity(
            {
                'to': [{
                    'objectType': 'user1',
                    'id': 'user:id:1'
                }, {
                    'objectType': 'user2',
                    'id': 'user:id:2'
                }],
                'bto': [{
                    'objectType': 'user3',
                    'id': 'user:id:3'
                }, {
                    'objectType': 'user4',
                    'id': 'user:id:4'
                }, {
                    'objectType': 'user5',
                    'id': 'user:id:5'
                }],
                'cc': [{
                    'objectType': 'user6',
                    'id': 'user:id:6'
                }],
                'bcc': [],
            },
            backend=MagicMock())

        act_dict = act._dict

        eq_(len(act_dict['to']), 2)
        eq_(len(act_dict['bto']), 3)
        eq_(len(act_dict['cc']), 1)
        eq_(len(act_dict['bcc']), 0)
Beispiel #4
0
    def activity_create(self, activity, **kwargs):
        """
        Creates an activity. You can provide objects for activities as dictionaries or as ids for already
        existing objects.

        If you provide a dictionary for an object, it is saved as a new object.

        If you provide an object id and the object does not exist, it is saved anyway, and returned as an empty
        dictionary when retriving the activity later.
        """
        activity = Activity(activity, backend=self)

        activity.validate()
        activity_dict = activity.get_parsed_dict()

        key = self._extract_id(activity_dict)

        riak_obj = self._activities.new(key=key)
        riak_obj.data = activity_dict
        riak_obj = self.set_activity_indexes(
            self.set_general_indexes(riak_obj))
        if activity_dict['verb'] in SUB_ACTIVITY_MAP:
            riak_obj = self.set_sub_item_indexes(riak_obj, **kwargs)

        riak_obj.store()

        return self.dehydrate_activities([riak_obj.data])[0]
Beispiel #5
0
    def sub_activity_create(self,
                            activity,
                            actor,
                            content,
                            extra={},
                            sub_activity_verb="",
                            published=None,
                            **kwargs):
        object_type = kwargs.get('object_type', sub_activity_verb)
        sub_activity_model = self.get_sub_activity_model(sub_activity_verb)
        sub_activity_attribute = self.get_sub_activity_attribute(
            sub_activity_verb)

        activity_id = self._extract_id(activity)
        raw_activity = self._get_raw_activities([activity_id])[0]
        activity_model = Activity(raw_activity, backend=self)

        sub_activity_table = getattr(self,
                                     '{}_table'.format(sub_activity_attribute))

        sub_activity, original_activity = activity_model\
            .get_parsed_sub_activity_dict(
                actor=actor, content=content, verb=sub_activity_verb,
                object_type=object_type, collection=sub_activity_attribute,
                activity_class=sub_activity_model, published=published, extra=extra)

        sub_activity = self.create_activity(sub_activity)[0]
        sub_activity_db_schema = self._convert_sub_activity_to_db_schema(
            sub_activity, original_activity)
        self.engine.execute(sub_activity_table.insert(),
                            [sub_activity_db_schema])

        return sub_activity, original_activity
Beispiel #6
0
 def test_disallowed_field_bcc(self):
     try:
         Activity({"id": 5, "title": "Stream Item", "verb": "post", "bcc": [], \
             "actor": {"objectType": "something", "id": 1232, "published": "today"}, \
             "object": {"objectType": "something", "id": 4353, "published": "today"}}, backend=MagicMock()).validate()
     except SunspearValidationException as e:
         ok_(isinstance(e, SunspearValidationException))
         eq_(e.message, "Reserved field name used: bcc")
Beispiel #7
0
    def activity_create(self, activity, **kwargs):
        """
        Creates an activity. This assumes the activity is already dehydrated (ie has refrences
        to the objects and not the actual objects itself)
        """
        activity = Activity(activity, backend=self)

        activity.validate()
        activity_dict = activity.get_parsed_dict()

        activity_db_schema_dict = self._activity_dict_to_db_schema(
            activity_dict)

        self.engine.execute(self.activities_table.insert(),
                            [activity_db_schema_dict])

        return self.get_activity(activity_dict)
Beispiel #8
0
    def test_initialize(self):
        act = Activity({"id": 5, "verb": "post", \
            "actor": {"objectType": "actor", "id": 1232, "published": "today"}, \
            "target": {"objectType": "target", "id": 4325, "published": "today"}, \
            "object": {"objectType": "something", "id": 4353, "published": "today"},
            "icon": {'url': "http://example.org/something"}}, backend=MagicMock())

        act_dict = act._dict
        ok_(isinstance(act_dict['actor'], dict))
        ok_(isinstance(act_dict['target'], dict))
        ok_(isinstance(act_dict['object'], dict))

        ok_(isinstance(act_dict['icon'], dict))

        ok_('replies' in act_dict)
        ok_('likes' in act_dict)

        eq_(act_dict['id'], str(5))
Beispiel #9
0
 def test_required_fields_no_verb(self):
     Activity({"id": 5, "title": "Stream Item", \
         "actor": {"objectType": "something", "id": 1232, "published": "today"}, \
         "object": {"objectType": "something", "id": 4353, "published": "today"}}, backend=MagicMock()).validate()
Beispiel #10
0
 def test_required_fields_no_id(self):
     act = Activity({"title": "Stream Item", "verb": "post", \
         "actor": {"objectType": "something", "id": 1232, "published": "today"}, \
         "object": {"objectType": "something", "id": 4353, "published": "today"}}, backend=MagicMock())
     act.validate()
     ok_(act.get_dict()["id"])
Beispiel #11
0
 def test_required_fields_all_there(self):
     Activity({"id": 5, "verb": "post", \
         "actor": {"objectType": "something", "id": 1232, "published": "today"}, \
         "object": {"objectType": "something", "id": 4353, "published": "today"}}, backend=MagicMock()).validate()
Beispiel #12
0
    def test_parse_data_with_audience_targeting(self):
        act = Activity(
            {
                'id':
                '4213',
                'to': [{
                    'objectType': 'user1',
                    'id': 'user:id:1',
                    'published': '2012-07-05T12:00:00Z'
                }, {
                    'objectType': 'user2',
                    'id': 'user:id:2',
                    'published': '2012-07-05T12:00:00Z'
                }],
                'bto': [{
                    'objectType': 'user3',
                    'id': 'user:id:3',
                    'published': '2012-07-05T12:00:00Z'
                }, {
                    'objectType': 'user4',
                    'id': 'user:id:4',
                    'published': '2012-07-05T12:00:00Z'
                }, {
                    'objectType': 'user5',
                    'id': 'user:id:5',
                    'published': '2012-07-05T12:00:00Z'
                }],
                'cc': [{
                    'objectType': 'user6',
                    'id': 'user:id:6',
                    'published': '2012-07-05T12:00:00Z'
                }],
                'bcc': [],
            },
            backend=MagicMock())

        act_dict = act.parse_data(act._dict)
        eq_(
            {
                'cc': [{
                    'published': '2012-07-05T12:00:00Z',
                    'id': 'user:id:6',
                    'objectType': 'user6'
                }],
                'bcc': [],
                'to': [{
                    'published': '2012-07-05T12:00:00Z',
                    'id': 'user:id:1',
                    'objectType': 'user1'
                }, {
                    'published': '2012-07-05T12:00:00Z',
                    'id': 'user:id:2',
                    'objectType': 'user2'
                }],
                'bto': [{
                    'published': '2012-07-05T12:00:00Z',
                    'id': 'user:id:3',
                    'objectType': 'user3'
                }, {
                    'published': '2012-07-05T12:00:00Z',
                    'id': 'user:id:4',
                    'objectType': 'user4'
                }, {
                    'published': '2012-07-05T12:00:00Z',
                    'id': 'user:id:5',
                    'objectType': 'user5'
                }],
                'id':
                '4213'
            }, act_dict)