kopia lustrzana https://github.com/snarfed/bridgy-fed
				
				
				
			
							rodzic
							
								
									26a63e116b
								
							
						
					
					
						commit
						79c1f71a58
					
				
							
								
								
									
										17
									
								
								protocol.py
								
								
								
								
							
							
						
						
									
										17
									
								
								protocol.py
								
								
								
								
							|  | @ -676,8 +676,8 @@ class Protocol: | |||
|         logger.info(f'Returning {ret}') | ||||
|         return ret | ||||
| 
 | ||||
|     @staticmethod | ||||
|     def _targets(obj): | ||||
|     @classmethod | ||||
|     def _targets(cls, obj): | ||||
|         """Collects the targets to send an :class:`models.Object` to. | ||||
| 
 | ||||
|         Args: | ||||
|  | @ -740,12 +740,17 @@ class Protocol: | |||
|                 add(obj.users, user_key) | ||||
|                 add(obj.labels, 'notification') | ||||
| 
 | ||||
|         user = as1.get_owner(obj.as1) or as1.get_owner(inner_obj_as1) | ||||
|         user_key = cls.key_for(user) if user else g.user.key if g.user else None | ||||
|         if not user_key: | ||||
|             logger.info("Can't tell who this is from! Skipping followers.") | ||||
|             return targets | ||||
| 
 | ||||
|         # deliver to followers? | ||||
|         if (obj.type in ('post', 'update', 'delete', 'share') | ||||
|             and not (obj.type == 'comment' or inner_obj_as1.get('inReplyTo'))): | ||||
|             # TODO: use obj's actor/author instead of g.user? | ||||
|             logger.info(f'Delivering to followers of {g.user.key}') | ||||
|             followers = Follower.query(Follower.to == g.user.key, | ||||
|                 and not (obj.type == 'comment' or inner_obj_as1.get('inReplyTo'))): | ||||
|             logger.info(f'Delivering to followers of {user_key}') | ||||
|             followers = Follower.query(Follower.to == user_key, | ||||
|                                        Follower.status == 'active' | ||||
|                                        ).fetch() | ||||
|             users = [u for u in ndb.get_multi(f.from_ for f in followers) if u] | ||||
|  |  | |||
|  | @ -253,7 +253,7 @@ class ProtocolReceiveTest(TestCase): | |||
| 
 | ||||
|     def setUp(self): | ||||
|         super().setUp() | ||||
|         g.user = self.make_user('fake:user', cls=Fake, obj_id='fake:user') | ||||
|         g.user = self.user = self.make_user('fake:user', cls=Fake, obj_id='fake:user') | ||||
|         self.alice = self.make_user('fake:alice', cls=Fake, obj_id='fake:alice') | ||||
|         self.bob = self.make_user('fake:bob', cls=Fake, obj_id='fake:bob') | ||||
| 
 | ||||
|  | @ -269,9 +269,9 @@ class ProtocolReceiveTest(TestCase): | |||
|         return super().assert_object(id, ignore=ignore, **props) | ||||
| 
 | ||||
|     def make_followers(self): | ||||
|         Follower.get_or_create(to=g.user, from_=self.alice) | ||||
|         Follower.get_or_create(to=g.user, from_=self.bob) | ||||
|         Follower.get_or_create(to=g.user, from_=Fake(id='fake:eve'), | ||||
|         Follower.get_or_create(to=self.user, from_=self.alice) | ||||
|         Follower.get_or_create(to=self.user, from_=self.bob) | ||||
|         Follower.get_or_create(to=self.user, from_=Fake(id='fake:eve'), | ||||
|                                status='inactive') | ||||
| 
 | ||||
|     def test_create_post(self): | ||||
|  | @ -655,6 +655,7 @@ class ProtocolReceiveTest(TestCase): | |||
|         self.assertEqual([(like_obj, 'fake:post:target')], Fake.sent) | ||||
| 
 | ||||
|     def test_delete(self): | ||||
|         g.user = None  # should use activity's actor | ||||
|         self.make_followers() | ||||
| 
 | ||||
|         post_as1 = { | ||||
|  | @ -668,6 +669,7 @@ class ProtocolReceiveTest(TestCase): | |||
|             'id': 'fake:delete', | ||||
|             'objectType': 'activity', | ||||
|             'verb': 'delete', | ||||
|             'actor': 'fake:user', | ||||
|             'object': 'fake:post', | ||||
|         } | ||||
|         self.assertEqual('OK', Fake.receive(delete_as1)) | ||||
|  | @ -684,15 +686,17 @@ class ProtocolReceiveTest(TestCase): | |||
|                                  delivered=['shared:target'], | ||||
|                                  type='delete', | ||||
|                                  labels=['user', 'activity', 'feed'], | ||||
|                                  users=[g.user.key, self.alice.key, self.bob.key], | ||||
|                                  users=[self.user.key, self.alice.key, self.bob.key], | ||||
|                                  ) | ||||
|         self.assertEqual([(obj, 'shared:target')], Fake.sent) | ||||
| 
 | ||||
|     def test_delete_no_followers_no_stored_object(self): | ||||
|         g.user = None  # should use activity's actor | ||||
|         delete_as1 = { | ||||
|             'id': 'fake:delete', | ||||
|             'objectType': 'activity', | ||||
|             'verb': 'delete', | ||||
|             'actor': 'fake:user', | ||||
|             'object': 'fake:post', | ||||
|         } | ||||
|         with self.assertRaises(NoContent): | ||||
|  | @ -709,22 +713,25 @@ class ProtocolReceiveTest(TestCase): | |||
|                            delivered=[], | ||||
|                            type='delete', | ||||
|                            labels=['user', 'activity', 'feed'], | ||||
|                            users=[g.user.key], | ||||
|                            users=[self.user.key], | ||||
|                            ) | ||||
|         self.assertEqual([], Fake.sent) | ||||
| 
 | ||||
|     def test_delete_actor(self): | ||||
|         follower = Follower.get_or_create(to=g.user, from_=self.alice) | ||||
|         g.user = None | ||||
| 
 | ||||
|         follower = Follower.get_or_create(to=self.user, from_=self.alice) | ||||
|         followee = Follower.get_or_create(to=self.alice, from_=self.bob) | ||||
|         other = Follower.get_or_create(to=g.user, from_=self.bob) | ||||
|         other = Follower.get_or_create(to=self.user, from_=self.bob) | ||||
|         self.assertEqual(3, Follower.query().count()) | ||||
| 
 | ||||
|         self.assertEqual('OK', Fake.receive({ | ||||
|             'objectType': 'activity', | ||||
|             'verb': 'delete', | ||||
|             'id': 'fake:delete', | ||||
|             'object': 'fake:alice', | ||||
|         })) | ||||
|         with self.assertRaises(NoContent): | ||||
|             Fake.receive({ | ||||
|                 'objectType': 'activity', | ||||
|                 'verb': 'delete', | ||||
|                 'id': 'fake:delete', | ||||
|                 'object': 'fake:alice', | ||||
|             }) | ||||
| 
 | ||||
|         self.assertEqual(3, Follower.query().count()) | ||||
|         self.assertEqual('inactive', follower.key.get().status) | ||||
|  | @ -735,6 +742,7 @@ class ProtocolReceiveTest(TestCase): | |||
|                            deleted=True, | ||||
|                            source_protocol=None, | ||||
|                            ) | ||||
| 
 | ||||
|     @patch.object(Fake, 'send') | ||||
|     @patch.object(Fake, 'target_for') | ||||
|     def test_send_error(self, mock_target_for, mock_send): | ||||
|  |  | |||
		Ładowanie…
	
		Reference in New Issue
	
	 Ryan Barrett
						Ryan Barrett