diff options
Diffstat (limited to 'de_uvok/activitypub_fuse')
| -rw-r--r-- | de_uvok/activitypub_fuse/fuse.py | 36 | 
1 files changed, 19 insertions, 17 deletions
diff --git a/de_uvok/activitypub_fuse/fuse.py b/de_uvok/activitypub_fuse/fuse.py index 8be5351..5a6052f 100644 --- a/de_uvok/activitypub_fuse/fuse.py +++ b/de_uvok/activitypub_fuse/fuse.py @@ -1,7 +1,7 @@  from datetime import datetime as dtp  import errno  import stat -from threading import Lock +from queue import SimpleQueue, Empty  from fuse import (      Operations,      FuseOSError, @@ -14,12 +14,9 @@ from .types import Status  class StatusFileSystem(Operations, LoggingMixIn):      def __init__(self): -        self._lock = Lock() - -        with self._lock: -            self.statuses: list[Status] = [] - -        self.fd = 0 +        self.__queue: SimpleQueue[list[Status]] = SimpleQueue() +        self.__statuses: list[Status] = [] +        self.__fd = 0      def getattr(self, path, fh=None):          (uid, gid, _) = fuse_get_context() @@ -30,8 +27,7 @@ class StatusFileSystem(Operations, LoggingMixIn):                  "st_uid": uid,                  "st_gid": gid,              } -        with self._lock: -            found = next((s for s in self.statuses if s.id == path[1:]), None) +        found = next((s for s in self.__statuses if s.id == path[1:]), None)          if found:              published_dt = dtp.fromisoformat(found.published) @@ -47,9 +43,17 @@ class StatusFileSystem(Operations, LoggingMixIn):              }          raise FuseOSError(errno.ENOENT) +    def __update_status_field(self): +        try: +            while True: +                statuses = self.__queue.get_nowait() +                self.__statuses.extend(statuses) +        except Empty: +            pass +      def list_dir(self) -> list[str]: -        with self._lock: -            return [s.id for s in self.statuses] +        self.__update_status_field() +        return [s.id for s in self.__statuses]      def readdir(self, path, fh):          dir_entries = [] @@ -60,16 +64,14 @@ class StatusFileSystem(Operations, LoggingMixIn):          return dir_entries      def add_statuses(self, statuses: list[Status]): -        with self._lock: -            self.statuses.extend(statuses) +        self.__queue.put(statuses)      def open(self, path, flags):  # type: ignore -        self.fd += 1 -        return self.fd +        self.__fd += 1 +        return self.__fd      def read(self, path, size, offset, fh):  # type: ignore -        with self._lock: -            found = next(s for s in self.statuses if s.id == path[1:]) +        found = next(s for s in self.__statuses if s.id == path[1:])          if found:              return found.content.encode("utf8")  | 
