summaryrefslogtreecommitdiff
path: root/de_uvok
diff options
context:
space:
mode:
authoruvok2025-01-23 20:29:07 +0100
committeruvok2025-01-23 20:29:07 +0100
commit4b537dd1d252026a2f3124191c9b91791e698f90 (patch)
tree5aa15a0197c97201e21a1374f9c27ff04c8af5f6 /de_uvok
parent7447b3e5ed07a274ae4407772a643b4d478e4d94 (diff)
Use SimpleQueue for posting statuses
Diffstat (limited to 'de_uvok')
-rw-r--r--de_uvok/activitypub_fuse/fuse.py36
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")