diff options
-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 |