mirror of
https://github.com/karma-riuk/crab-webapp.git
synced 2025-07-05 14:18:12 +02:00
users now see their position in the queue update
in real time
This commit is contained in:
@ -12,6 +12,10 @@ class Status(Enum):
|
||||
|
||||
|
||||
class Observer(ABC):
|
||||
@abstractmethod
|
||||
def updateStarted(self):
|
||||
...
|
||||
|
||||
@abstractmethod
|
||||
def updatePercentage(self, percentage: float):
|
||||
...
|
||||
@ -24,12 +28,15 @@ class Observer(ABC):
|
||||
class SocketObserver(Observer):
|
||||
socket2obs: dict[str, "SocketObserver"] = {}
|
||||
|
||||
def __init__(self, sid: str, socket_emit: Callable[[str, Any], None]) -> None:
|
||||
def __init__(self, sid: str, socket_emit: Callable) -> None:
|
||||
super().__init__()
|
||||
self.sid = sid
|
||||
self.socket_emit = socket_emit
|
||||
SocketObserver.socket2obs[self.sid] = self
|
||||
|
||||
def updateStarted(self):
|
||||
self.socket_emit("started-processing")
|
||||
|
||||
def updatePercentage(self, percentage: float):
|
||||
self.socket_emit("progress", {'percent': percentage})
|
||||
|
||||
@ -39,6 +46,8 @@ class SocketObserver(Observer):
|
||||
|
||||
|
||||
class Subject:
|
||||
obs2subject: dict[Observer, "Subject"] = {}
|
||||
|
||||
def __init__(self, id: str, type_: str, task: Callable) -> None:
|
||||
self.id = id
|
||||
self.type = type_
|
||||
@ -50,9 +59,16 @@ class Subject:
|
||||
|
||||
def registerObserver(self, observer: Observer) -> None:
|
||||
self.observers.add(observer)
|
||||
Subject.obs2subject[observer] = self
|
||||
|
||||
def unregisterObserver(self, observer: Observer):
|
||||
self.observers.remove(observer)
|
||||
Subject.obs2subject.pop(observer)
|
||||
|
||||
def notifyStarted(self):
|
||||
self.status = Status.PROCESSING
|
||||
for observer in self.observers:
|
||||
observer.updateStarted
|
||||
|
||||
def notifyPercentage(self, percentage: float):
|
||||
self.percent = percentage
|
||||
@ -63,8 +79,10 @@ class Subject:
|
||||
self.status = Status.COMPLETE
|
||||
for observer in self.observers:
|
||||
observer.updateComplete({"type": self.type, "results": results})
|
||||
Subject.obs2subject.pop(observer)
|
||||
self.observers.clear()
|
||||
self.results = results
|
||||
# TODO: maybe save results to disk here?
|
||||
|
||||
|
||||
request2status: dict[str, Subject] = {}
|
||||
uuid2subject: dict[str, Subject] = {}
|
||||
|
Reference in New Issue
Block a user