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)
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
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)
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]
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
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")
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)
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))
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()
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"])
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()
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)