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  | 
