diff options
author | uvok | 2025-01-19 18:22:57 +0100 |
---|---|---|
committer | uvok | 2025-01-19 18:22:57 +0100 |
commit | 9ba368c93eb1c73da60be590bfbfe533a90c84cb (patch) | |
tree | 7e1abb01c0c565586f444d0b560ac0f0baa95e9b | |
parent | a84a9a8f6e5abc43713750e4276bdfead2211cbc (diff) |
Use separate class for status loading
-rw-r--r-- | hello-fusepy.py | 55 |
1 files changed, 32 insertions, 23 deletions
diff --git a/hello-fusepy.py b/hello-fusepy.py index 2d491b0..13a0968 100644 --- a/hello-fusepy.py +++ b/hello-fusepy.py @@ -31,14 +31,43 @@ class Status(object): self.content = content self.published = published +class StatusProvider: + def load_statuses(self) -> list[Status]: + raise NotImplementedError + + def _fallback_not_found(self): + return [Status("not-found", "User not found\n", "1970-01-01T00:00:00Z")] + +class ActivityPubStatusProvider(StatusProvider): + def __init__(self, server: str, user: str): + self.server = server + self.user = user + + def load_statuses(self) -> list[Status]: + url = api_url_ap_template.format(server=self.server, user=self.user) + res = requests.get(url) + if res.status_code == 404: + return self._fallback_not_found() + + res.raise_for_status() + stats = res.json() + logging.debug(f"Status: ${stats['id']}") + return [ + Status( + s["object"]["id"].split("/")[-1], + s["object"]["content"], + s["object"]["published"], + ) + for s in stats["orderedItems"] + if s["type"] == "Create" + ] class HelloWorld(Operations, LoggingMixIn): def __init__(self, api: APIChoice, server: str, user: str): self.statuses: list[Status] = [] self.fd = 0 self.api = api - self.server = server - self.user = user + self.status_provider = ActivityPubStatusProvider(server, user) def getattr(self, path, fh=None): (uid, gid, _) = fuse_get_context() @@ -64,26 +93,6 @@ class HelloWorld(Operations, LoggingMixIn): } raise FuseOSError(errno.ENOENT) - def load_statuses(self): - url = api_url_template_ap.format(server=self.server, user=self.user) - res = requests.get(url) - if res.status_code == 404: - self.statuses = [Status("not-found", "User not found\n", "1970-01-01T00:00:00Z")] - return - - res.raise_for_status() - stats = res.json() - logging.debug(f"Status: ${stats['id']}") - self.statuses = [ - Status( - s["object"]["id"].split("/")[-1], - s["object"]["content"], - s["object"]["published"], - ) - for s in stats["orderedItems"] - ] - pass - def list_dir(self) -> list[str]: return [s.id for s in self.statuses] @@ -93,7 +102,7 @@ class HelloWorld(Operations, LoggingMixIn): raise FuseOSError(errno.ENOENT) dir_entries = [".", ".."] if not self.statuses: - self.load_statuses() + self.statuses = self.status_provider.load_statuses() dir_entries += self.list_dir() return dir_entries |