summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--hello-fusepy.py55
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