kopia lustrzana https://github.com/snarfed/bridgy-fed
				
				
				
			noop: protocol: label classmethod cls identifiers with from/to
							rodzic
							
								
									bd7cfa20f6
								
							
						
					
					
						commit
						0d2e4fb66a
					
				|  | @ -161,13 +161,13 @@ class ActivityPub(User, Protocol): | |||
|         return actor.get('publicInbox') or actor.get('inbox') | ||||
| 
 | ||||
|     @classmethod | ||||
|     def send(cls, obj, url, log_data=True): | ||||
|     def send(to_cls, obj, url, log_data=True): | ||||
|         """Delivers an activity to an inbox URL. | ||||
| 
 | ||||
|         If `obj.recipient_obj` is set, it's interpreted as the receiving actor | ||||
|         who we're delivering to and its id is populated into `cc`. | ||||
|         """ | ||||
|         if cls.is_blocklisted(url): | ||||
|         if to_cls.is_blocklisted(url): | ||||
|             logger.info(f'Skipping sending to {url}') | ||||
|             return False | ||||
| 
 | ||||
|  |  | |||
|  | @ -133,7 +133,7 @@ class ATProto(User, Protocol): | |||
|         return util.domain_or_parent_in(util.domain_from_link(url), DOMAIN_BLOCKLIST) | ||||
| 
 | ||||
|     @classmethod | ||||
|     def send(cls, obj, url, log_data=True): | ||||
|     def send(to_cls, obj, url, log_data=True): | ||||
|         """Creates a record if we own its repo. | ||||
| 
 | ||||
|         Creates the repo first if it doesn't exist. | ||||
|  | @ -167,7 +167,7 @@ class ATProto(User, Protocol): | |||
|         repo = None | ||||
|         if user.atproto_did: | ||||
|             # existing DID and repo | ||||
|             did_doc = cls.load(user.atproto_did) | ||||
|             did_doc = to_cls.load(user.atproto_did) | ||||
|             pds = did_doc.raw['services']['atproto_pds']['endpoint'] | ||||
|             if pds.rstrip('/') != url.rstrip('/'): | ||||
|                 logger.warning(f'{user_key} {user.atproto_did} PDS {pds} is not us') | ||||
|  |  | |||
							
								
								
									
										43
									
								
								protocol.py
								
								
								
								
							
							
						
						
									
										43
									
								
								protocol.py
								
								
								
								
							|  | @ -255,7 +255,7 @@ class Protocol: | |||
|             return g.user.key | ||||
| 
 | ||||
|     @classmethod | ||||
|     def send(cls, obj, url, log_data=True): | ||||
|     def send(to_cls, obj, url, log_data=True): | ||||
|         """Sends an outgoing activity. | ||||
| 
 | ||||
|         To be implemented by subclasses. | ||||
|  | @ -359,7 +359,7 @@ class Protocol: | |||
|                                         DOMAIN_BLOCKLIST + DOMAINS) | ||||
| 
 | ||||
|     @classmethod | ||||
|     def receive(cls, obj): | ||||
|     def receive(from_cls, obj): | ||||
|         """Handles an incoming activity. | ||||
| 
 | ||||
|         If obj's key is unset, obj.as1's id field is used. If both are unset, | ||||
|  | @ -375,9 +375,9 @@ class Protocol: | |||
|           :class:`werkzeug.HTTPException` if the request is invalid | ||||
|         """ | ||||
|         # check some invariants | ||||
|         assert cls != Protocol | ||||
|         assert from_cls != Protocol | ||||
|         assert isinstance(obj, Object), obj | ||||
|         logger.info(f'From {cls.__name__}: {obj.key} AS1: {json_dumps(obj.as1, indent=2)}') | ||||
|         logger.info(f'From {from_cls.__name__}: {obj.key} AS1: {json_dumps(obj.as1, indent=2)}') | ||||
| 
 | ||||
|         if not obj.as1: | ||||
|             error('No object data provided') | ||||
|  | @ -403,7 +403,7 @@ class Protocol: | |||
|                 if (already_seen | ||||
|                         or (obj.new is False and obj.changed is False) | ||||
|                         or (obj.new is None and obj.changed is None | ||||
|                             and cls.load(id, remote=False))): | ||||
|                             and from_cls.load(id, remote=False))): | ||||
|                     msg = f'Already handled this activity {id}' | ||||
|                     logger.info(msg) | ||||
|                     return msg, 204 | ||||
|  | @ -417,13 +417,13 @@ class Protocol: | |||
|             obj.changed = orig.changed | ||||
| 
 | ||||
|         # if this is a post, ie not an activity, wrap it in a create or update | ||||
|         obj = cls._handle_bare_object(obj) | ||||
|         obj = from_cls._handle_bare_object(obj) | ||||
| 
 | ||||
|         if obj.type not in SUPPORTED_TYPES: | ||||
|             error(f'Sorry, {obj.type} activities are not supported yet.', status=501) | ||||
| 
 | ||||
|         # add owner(s) | ||||
|         actor_key = cls.actor_key(obj, default_g_user=False) | ||||
|         actor_key = from_cls.actor_key(obj, default_g_user=False) | ||||
|         if actor_key: | ||||
|             add(obj.users, actor_key) | ||||
| 
 | ||||
|  | @ -431,11 +431,11 @@ class Protocol: | |||
|         if obj.as1.get('verb') in ('post', 'update', 'delete'): | ||||
|             inner_actor = as1.get_owner(inner_obj_as1) | ||||
|             if inner_actor: | ||||
|                 user_key = cls.key_for(inner_actor) | ||||
|                 user_key = from_cls.key_for(inner_actor) | ||||
|                 if user_key: | ||||
|                     add(obj.users, user_key) | ||||
| 
 | ||||
|         obj.source_protocol = cls.LABEL | ||||
|         obj.source_protocol = from_cls.LABEL | ||||
|         obj.put() | ||||
| 
 | ||||
|         # store inner object | ||||
|  | @ -443,7 +443,7 @@ class Protocol: | |||
|         inner_obj = None | ||||
|         if obj.type in ('post', 'update') and inner_obj_as1.keys() > set(['id']): | ||||
|             Object.get_or_create(inner_obj_id, our_as1=inner_obj_as1, | ||||
|                                  source_protocol=cls.LABEL) | ||||
|                                  source_protocol=from_cls.LABEL) | ||||
| 
 | ||||
|         actor = as1.get_object(obj.as1, 'actor') | ||||
|         actor_id = actor.get('id') | ||||
|  | @ -461,7 +461,7 @@ class Protocol: | |||
|             # deactivate Follower | ||||
|             # TODO: avoid import? | ||||
|             from web import Web | ||||
|             from_ = cls.key_for(actor_id) | ||||
|             from_ = from_cls.key_for(actor_id) | ||||
|             to_cls = Protocol.for_id(inner_obj_id) or Web | ||||
|             to = to_cls.key_for(inner_obj_id) | ||||
|             follower = Follower.query(Follower.to == to, | ||||
|  | @ -493,7 +493,7 @@ class Protocol: | |||
| 
 | ||||
|             # if this is an actor, deactivate its followers/followings | ||||
|             # https://github.com/snarfed/bridgy-fed/issues/63 | ||||
|             deleted_user = cls.key_for(id=inner_obj_id) | ||||
|             deleted_user = from_cls.key_for(id=inner_obj_id) | ||||
|             if deleted_user: | ||||
|                 logger.info(f'Deactivating Followers from or to = {inner_obj_id}') | ||||
|                 followers = Follower.query(OR(Follower.to == deleted_user, | ||||
|  | @ -508,15 +508,15 @@ class Protocol: | |||
|         # fetch actor if necessary so we have name, profile photo, etc | ||||
|         if actor and actor.keys() == set(['id']): | ||||
|             logger.info('Fetching actor so we have name, profile photo, etc') | ||||
|             actor_obj = cls.load(actor['id']) | ||||
|             actor_obj = from_cls.load(actor['id']) | ||||
|             if actor_obj and actor_obj.as1: | ||||
|                 obj.our_as1 = {**obj.as1, 'actor': actor_obj.as1} | ||||
| 
 | ||||
|         # fetch object if necessary so we can render it in feeds | ||||
|         if obj.type == 'share' and inner_obj_as1.keys() == set(['id']): | ||||
|             if not inner_obj and cls.owns_id(inner_obj_id): | ||||
|             if not inner_obj and from_cls.owns_id(inner_obj_id): | ||||
|                 logger.info('Fetching object so we can render it in feeds') | ||||
|                 inner_obj = cls.load(inner_obj_id) | ||||
|                 inner_obj = from_cls.load(inner_obj_id) | ||||
|             if inner_obj and inner_obj.as1: | ||||
|                 obj.our_as1 = { | ||||
|                     **obj.as1, | ||||
|  | @ -527,13 +527,13 @@ class Protocol: | |||
|                 } | ||||
| 
 | ||||
|         if obj.type == 'follow': | ||||
|             cls._handle_follow(obj) | ||||
|             from_cls._handle_follow(obj) | ||||
| 
 | ||||
|         # deliver to targets | ||||
|         return cls._deliver(obj) | ||||
|         return from_cls._deliver(obj) | ||||
| 
 | ||||
|     @classmethod | ||||
|     def _handle_follow(cls, obj): | ||||
|     def _handle_follow(from_cls, obj): | ||||
|         """Handles an incoming follow activity. | ||||
| 
 | ||||
|         Args: | ||||
|  | @ -547,7 +547,6 @@ class Protocol: | |||
|         if not from_id: | ||||
|             error(f'Follow activity requires actor. Got: {obj.as1}') | ||||
| 
 | ||||
|         from_cls = cls | ||||
|         from_obj = from_cls.load(from_id) | ||||
|         if not from_obj: | ||||
|             error(f"Couldn't load {from_id}") | ||||
|  | @ -617,7 +616,7 @@ class Protocol: | |||
|                 'actor': to_id, | ||||
|                 'object': obj.as1, | ||||
|             }) | ||||
|             sent = cls.send(accept, from_target) | ||||
|             sent = from_cls.send(accept, from_target) | ||||
|             if sent: | ||||
|                 accept.populate( | ||||
|                     delivered=[Target(protocol=from_cls.LABEL, uri=from_target)], | ||||
|  | @ -691,7 +690,7 @@ class Protocol: | |||
|         error(f'{obj.key.id()} is unchanged, nothing to do', status=204) | ||||
| 
 | ||||
|     @classmethod | ||||
|     def _deliver(cls, obj): | ||||
|     def _deliver(from_cls, obj): | ||||
|         """Delivers an activity to its external recipients. | ||||
| 
 | ||||
|         Args: | ||||
|  | @ -699,7 +698,7 @@ class Protocol: | |||
|         """ | ||||
|         # find delivery targets | ||||
|         # sort targets so order is deterministic for tests, debugging, etc | ||||
|         targets = cls._targets(obj)  # maps Target to Object or None | ||||
|         targets = from_cls._targets(obj)  # maps Target to Object or None | ||||
| 
 | ||||
|         if not targets: | ||||
|             obj.status = 'ignored' | ||||
|  |  | |||
							
								
								
									
										4
									
								
								web.py
								
								
								
								
							
							
						
						
									
										4
									
								
								web.py
								
								
								
								
							|  | @ -270,7 +270,7 @@ class Web(User, Protocol): | |||
|         return obj.key.id() | ||||
| 
 | ||||
|     @classmethod | ||||
|     def send(cls, obj, url, **kwargs): | ||||
|     def send(to_cls, obj, url, **kwargs): | ||||
|         """Sends a webmention to a given target URL. | ||||
| 
 | ||||
|         See :meth:`Protocol.send` for details. | ||||
|  | @ -285,7 +285,7 @@ class Web(User, Protocol): | |||
|         verb = obj.as1.get('verb') | ||||
|         if (verb in ('accept', 'undo') | ||||
|                 or url not in as1.targets(obj.as1) | ||||
|                 or cls.is_blocklisted(url)): | ||||
|                 or to_cls.is_blocklisted(url)): | ||||
|             logger.info(f'Skipping sending to {url}') | ||||
|             return False | ||||
| 
 | ||||
|  |  | |||
		Ładowanie…
	
		Reference in New Issue
	
	 Ryan Barrett
						Ryan Barrett