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
def run(self) -> dict:
20    def run(self) -> dict:
21        return {
22            "type": "Image",
23            "mediaType": self.media_type,
24            "url": self.url
25        }
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
Attachment()
29    def __init__(self) -> None:
30        self.attachments = []
def add_property_value(self, name, value):
32    def add_property_value(self, name, value):
33        self.attachments.append({
34            "type": "PropertyValue",
35            "name": name,
36            "value": value
37        })
def run(self) -> dict:
39    def run(self) -> dict:
40        return self.attachments
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
Tags(domain)
54    def __init__(self, domain) -> None:
55        self.domain = domain
56        self.tags = []
def add_emoji(self, name, url) -> None:
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        })
def run(self) -> dict:
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        }
PublicKey(domain, username, public_key)
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
def run(self) -> dict:
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}"
def run(self) -> dict:
 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        }