mirror of
https://github.com/karma-riuk/crab-webapp.git
synced 2025-07-05 14:18:12 +02:00
moved the source of data to prevent spamming
status to observer, as it was more convinient to delete on completion
This commit is contained in:
@ -68,8 +68,7 @@ def handler(type_: str, validate_json: Callable, evaluate_submission: Callable):
|
|||||||
if sid:
|
if sid:
|
||||||
socket_emit('successful-upload')
|
socket_emit('successful-upload')
|
||||||
socket_emit('started-processing')
|
socket_emit('started-processing')
|
||||||
obs = SocketObserver(socket_emit)
|
obs = SocketObserver(sid, socket_emit)
|
||||||
socket2observer[sid] = obs
|
|
||||||
subject.registerObserver(obs)
|
subject.registerObserver(obs)
|
||||||
|
|
||||||
subject.launch_task(validated)
|
subject.launch_task(validated)
|
||||||
@ -102,7 +101,7 @@ def status(id):
|
|||||||
|
|
||||||
subject = request2status[id]
|
subject = request2status[id]
|
||||||
if subject.status == Status.COMPLETE:
|
if subject.status == Status.COMPLETE:
|
||||||
return jsonify({"status": "complete", "results": subject.results})
|
return jsonify({"status": "complete", "type": subject.type, "results": subject.results})
|
||||||
elif subject.status == Status.PROCESSING:
|
elif subject.status == Status.PROCESSING:
|
||||||
socketio = current_app.extensions['socketio']
|
socketio = current_app.extensions['socketio']
|
||||||
sid = request.headers.get('X-Socket-Id')
|
sid = request.headers.get('X-Socket-Id')
|
||||||
@ -110,7 +109,7 @@ def status(id):
|
|||||||
|
|
||||||
request2status[id] = subject
|
request2status[id] = subject
|
||||||
if sid:
|
if sid:
|
||||||
if sid in socket2observer:
|
if sid in SocketObserver.socket2obs:
|
||||||
return (
|
return (
|
||||||
jsonify(
|
jsonify(
|
||||||
{
|
{
|
||||||
@ -121,8 +120,7 @@ def status(id):
|
|||||||
400,
|
400,
|
||||||
)
|
)
|
||||||
|
|
||||||
obs = SocketObserver(socket_emit)
|
obs = SocketObserver(sid, socket_emit)
|
||||||
socket2observer[sid] = obs
|
|
||||||
obs.updatePercentage(subject.percent)
|
obs.updatePercentage(subject.percent)
|
||||||
subject.registerObserver(obs)
|
subject.registerObserver(obs)
|
||||||
return jsonify({"status": "processing", "percent": subject.percent})
|
return jsonify({"status": "processing", "percent": subject.percent})
|
||||||
|
@ -21,21 +21,27 @@ class Observer(ABC):
|
|||||||
|
|
||||||
|
|
||||||
class SocketObserver(Observer):
|
class SocketObserver(Observer):
|
||||||
def __init__(self, socket_emit: Callable[[str, Any], None]) -> None:
|
socket2obs: dict[str, "SocketObserver"] = {}
|
||||||
|
|
||||||
|
def __init__(self, sid: str, socket_emit: Callable[[str, Any], None]) -> None:
|
||||||
super().__init__()
|
super().__init__()
|
||||||
|
self.sid = sid
|
||||||
self.socket_emit = socket_emit
|
self.socket_emit = socket_emit
|
||||||
|
SocketObserver.socket2obs[self.sid] = self
|
||||||
|
|
||||||
def updatePercentage(self, percentage: float):
|
def updatePercentage(self, percentage: float):
|
||||||
self.socket_emit("progress", {'percent': percentage})
|
self.socket_emit("progress", {'percent': percentage})
|
||||||
|
|
||||||
def updateComplete(self, results: dict):
|
def updateComplete(self, results: dict):
|
||||||
self.socket_emit("complete", results)
|
self.socket_emit("complete", results)
|
||||||
|
SocketObserver.socket2obs.pop(self.sid)
|
||||||
|
|
||||||
|
|
||||||
class Subject:
|
class Subject:
|
||||||
# TODO: maybe have a process or thread pool here to implement the queue
|
# TODO: maybe have a process or thread pool here to implement the queue
|
||||||
def __init__(self, id: str, task: Callable) -> None:
|
def __init__(self, id: str, type_: str, task: Callable) -> None:
|
||||||
self.id = id
|
self.id = id
|
||||||
|
self.type = type_
|
||||||
self.observers: Set[Observer] = set()
|
self.observers: Set[Observer] = set()
|
||||||
self.status: Status = Status.CREATED
|
self.status: Status = Status.CREATED
|
||||||
self.results: Optional[dict] = None
|
self.results: Optional[dict] = None
|
||||||
|
Reference in New Issue
Block a user