social media crossposting tool. 3rd time's the charm
mastodon misskey crossposting bluesky

rename a variable and add text_format

zenfyr.dev c956a17f 2ffc45de

verified
Changed files
+45 -20
mastodon
misskey
+31 -6
mastodon/info.py
···
from cross.service import Service
from util.util import normalize_service_url
+
def validate_and_transform(data: dict[str, Any]):
-
if 'token' not in data or 'instance' not in data:
+
if "token" not in data or "instance" not in data:
raise KeyError("Missing required values 'token' or 'instance'")
data["instance"] = normalize_service_url(data["instance"])
+
@dataclass(kw_only=True)
class InstanceInfo:
···
image_size_limit: int = 16777216
video_size_limit: int = 103809024
+
text_format: str = "text/plain"
+
@classmethod
def from_api(cls, data: dict[str, Any]) -> "InstanceInfo":
config: dict[str, Any] = {}
···
"characters_reserved_per_url"
]
+
# glitch content type
+
if "supported_mime_types" in statuses_config:
+
text_mimes: list[str] = statuses_config["supported_mime_types"]
+
+
if "text/x.misskeymarkdown" in text_mimes:
+
config["text_format"] = "text/x.misskeymarkdown"
+
elif "text/markdown" in text_mimes:
+
config["text_format"] = "text/markdown"
+
if "media_attachments" in data:
-
media_config: dict[str, Any] = data.get("media_attachments", {})
+
media_config: dict[str, Any] = data["media_attachments"]
if "image_size_limit" in media_config:
config["image_size_limit"] = media_config["image_size_limit"]
if "video_size_limit" in media_config:
···
config["image_size_limit"] = data["upload_limit"]
config["video_size_limit"] = data["upload_limit"]
+
if "pleroma" in data:
+
pleroma: dict[str, Any] = data["pleroma"]
+
if "metadata" in pleroma:
+
metadata: dict[str, Any] = pleroma["metadata"]
+
if "post_formats" in metadata:
+
post_formats: list[str] = metadata["post_formats"]
+
+
if "text/x.misskeymarkdown" in post_formats:
+
config["text_format"] = "text/x.misskeymarkdown"
+
elif "text/markdown" in post_formats:
+
config["text_format"] = "text/markdown"
+
return InstanceInfo(**config)
class MastodonService(ABC, Service):
def verify_credentials(self):
token = self._get_token()
-
responce = requests.get(
+
response = requests.get(
f"{self.url}/api/v1/accounts/verify_credentials",
headers={"Authorization": f"Bearer {token}"},
)
-
if responce.status_code != 200:
+
if response.status_code != 200:
self.log.error("Failed to validate user credentials!")
-
responce.raise_for_status()
-
return dict(responce.json())
+
response.raise_for_status()
+
return dict(response.json())
def fetch_instance_info(self):
token = self._get_token()
+4 -4
mastodon/input.py
···
self.options: MastodonInputOptions = options
self.log.info("Verifying %s credentails...", self.url)
-
responce = self.verify_credentials()
-
self.user_id: str = responce["id"]
+
response = self.verify_credentials()
+
self.user_id: str = response["id"]
self.log.info("Getting %s configuration...", self.url)
-
responce = self.fetch_instance_info()
-
self.streaming_url: str = responce["urls"]["streaming_api"]
+
response = self.fetch_instance_info()
+
self.streaming_url: str = response["urls"]["streaming_api"]
@override
def _get_token(self) -> str:
+4 -4
mastodon/output.py
···
self.options: MastodonOutputOptions = options
self.log.info("Verifying %s credentails...", self.url)
-
responce = self.verify_credentials()
-
self.user_id: str = responce["id"]
+
response = self.verify_credentials()
+
self.user_id: str = response["id"]
self.log.info("Getting %s configuration...", self.url)
-
responce = self.fetch_instance_info()
-
self.instance_info: InstanceInfo = InstanceInfo.from_api(responce)
+
response = self.fetch_instance_info()
+
self.instance_info: InstanceInfo = InstanceInfo.from_api(response)
@override
def _get_token(self) -> str:
+4 -4
misskey/info.py
···
class MisskeyService(ABC, Service):
def verify_credentials(self):
-
responce = requests.post(
+
response = requests.post(
f"{self.url}/api/i",
json={"i": self._get_token()},
headers={"Content-Type": "application/json"},
)
-
if responce.status_code != 200:
+
if response.status_code != 200:
self.log.error("Failed to validate user credentials!")
-
responce.raise_for_status()
-
return dict(responce.json())
+
response.raise_for_status()
+
return dict(response.json())
@abstractmethod
def _get_token(self) -> str:
+2 -2
misskey/input.py
···
self.options: MisskeyInputOptions = options
self.log.info("Verifying %s credentails...", self.url)
-
responce = self.verify_credentials()
-
self.user_id: str = responce["id"]
+
response = self.verify_credentials()
+
self.user_id: str = response["id"]
@override
def _get_token(self) -> str: