activity_tools.misc
1import re 2 3class ImageAsset: 4 5 def __init__(self, url, media_type=None) -> None: 6 if not media_type: 7 ext = url.split(".")[-1] 8 9 if ext == "jpg" or ext == "jpeg": 10 media_type = "image/jpeg" 11 elif ext == "png": 12 media_type = "image/png" 13 else: 14 raise Exception(f"Unknown extension {ext}, specify media_type") 15 16 self.media_type = media_type 17 self.url = url 18 19 def run(self) -> dict: 20 return { 21 "type": "Image", 22 "mediaType": self.media_type, 23 "url": self.url 24 } 25 26class Attachment: 27 28 def __init__(self) -> None: 29 self.attachments = [] 30 31 def add_property_value(self, name, value): 32 self.attachments.append({ 33 "type": "PropertyValue", 34 "name": name, 35 "value": value 36 }) 37 38 def run(self) -> dict: 39 return self.attachments 40 41class Link: 42 43 def __init__(self, url, text) -> None: 44 self.url = url 45 self.text = text 46 47 def run(self) -> dict: 48 return f'<a href="{self.url}" target="_blank" rel="nofollow noopener noreferrer">{self.text}</a>' 49 50 51class Tags: 52 53 def __init__(self, domain) -> None: 54 self.domain = domain 55 self.tags = [] 56 57 def add_emoji(self, name, url) -> None: 58 self.tags.append({ 59 "id": f"https://{self.domain}/emoji/{name}", 60 "type": "Emoji", 61 "name": ":{name}:", 62 "icon": ImageAsset(url).run() 63 }) 64 65 def run(self) -> dict: 66 return self.tags 67 68class PublicKey: 69 70 def __init__(self, domain, username, public_key) -> None: 71 self.id = f"https://{domain}/users/{username}/key" 72 self.owner = f"https://{domain}/users/{username}" 73 self.public_key = public_key 74 75 def run(self) -> dict: 76 return { 77 "id": self.id, 78 "owner": self.owner, 79 "publicKeyPem": self.public_key, 80 } 81 82class WebFinger: 83 84 def __init__(self, domain, resource, actor_url=None) -> None: 85 self.domain = domain 86 self.resource = resource 87 88 m = re.match(r"^acct:(.+)@(.+)$", resource) 89 self.username = m.group(1) 90 91 if actor_url: 92 self.actor_url = actor_url 93 else: 94 self.actor_url = f"https://{self.domain}/users/{self.username}" 95 96 def run(self) -> dict: 97 return { 98 "subject": self.resource, 99 "links": [ 100 { 101 "rel": "self", 102 "type": "application/activity+json", 103 "href": self.actor_url 104 } 105 ] 106 }
class
ImageAsset:
4class ImageAsset: 5 6 def __init__(self, url, media_type=None) -> None: 7 if not media_type: 8 ext = url.split(".")[-1] 9 10 if ext == "jpg" or ext == "jpeg": 11 media_type = "image/jpeg" 12 elif ext == "png": 13 media_type = "image/png" 14 else: 15 raise Exception(f"Unknown extension {ext}, specify media_type") 16 17 self.media_type = media_type 18 self.url = url 19 20 def run(self) -> dict: 21 return { 22 "type": "Image", 23 "mediaType": self.media_type, 24 "url": self.url 25 }
ImageAsset(url, media_type=None)
6 def __init__(self, url, media_type=None) -> None: 7 if not media_type: 8 ext = url.split(".")[-1] 9 10 if ext == "jpg" or ext == "jpeg": 11 media_type = "image/jpeg" 12 elif ext == "png": 13 media_type = "image/png" 14 else: 15 raise Exception(f"Unknown extension {ext}, specify media_type") 16 17 self.media_type = media_type 18 self.url = url
class
Attachment:
27class Attachment: 28 29 def __init__(self) -> None: 30 self.attachments = [] 31 32 def add_property_value(self, name, value): 33 self.attachments.append({ 34 "type": "PropertyValue", 35 "name": name, 36 "value": value 37 }) 38 39 def run(self) -> dict: 40 return self.attachments
class
Link:
class
Tags:
52class Tags: 53 54 def __init__(self, domain) -> None: 55 self.domain = domain 56 self.tags = [] 57 58 def add_emoji(self, name, url) -> None: 59 self.tags.append({ 60 "id": f"https://{self.domain}/emoji/{name}", 61 "type": "Emoji", 62 "name": ":{name}:", 63 "icon": ImageAsset(url).run() 64 }) 65 66 def run(self) -> dict: 67 return self.tags
class
PublicKey:
69class PublicKey: 70 71 def __init__(self, domain, username, public_key) -> None: 72 self.id = f"https://{domain}/users/{username}/key" 73 self.owner = f"https://{domain}/users/{username}" 74 self.public_key = public_key 75 76 def run(self) -> dict: 77 return { 78 "id": self.id, 79 "owner": self.owner, 80 "publicKeyPem": self.public_key, 81 }
class
WebFinger:
83class WebFinger: 84 85 def __init__(self, domain, resource, actor_url=None) -> None: 86 self.domain = domain 87 self.resource = resource 88 89 m = re.match(r"^acct:(.+)@(.+)$", resource) 90 self.username = m.group(1) 91 92 if actor_url: 93 self.actor_url = actor_url 94 else: 95 self.actor_url = f"https://{self.domain}/users/{self.username}" 96 97 def run(self) -> dict: 98 return { 99 "subject": self.resource, 100 "links": [ 101 { 102 "rel": "self", 103 "type": "application/activity+json", 104 "href": self.actor_url 105 } 106 ] 107 }
WebFinger(domain, resource, actor_url=None)
85 def __init__(self, domain, resource, actor_url=None) -> None: 86 self.domain = domain 87 self.resource = resource 88 89 m = re.match(r"^acct:(.+)@(.+)$", resource) 90 self.username = m.group(1) 91 92 if actor_url: 93 self.actor_url = actor_url 94 else: 95 self.actor_url = f"https://{self.domain}/users/{self.username}"