From 431f54d542fd6b7d4f56cb69f927152ccd5f9c25 Mon Sep 17 00:00:00 2001
From: Krish Moodbidri <krish94@uab.edu>
Date: Thu, 11 Mar 2021 16:21:01 -0600
Subject: [PATCH] Added factory function/wrapper function around callback to be
 able to send message via room Changed account error message from send_msg to
 use socket.emit and send the error message to the UI Removed account timeout
 while testing, to ensure error's caused are only due to rabbitmq account
 create error and not timeout from client to server

---
 tasks.py | 44 ++++++++++++++++++++++----------------------
 1 file changed, 22 insertions(+), 22 deletions(-)

diff --git a/tasks.py b/tasks.py
index 6001440..6b5973a 100644
--- a/tasks.py
+++ b/tasks.py
@@ -16,24 +16,27 @@ celery = Celery('flask_user_reg', broker=broker_url)
 socketio = SocketIO(message_queue=vars.message_queue)
 timeout = 60
 
-def callback(channel, method, properties, body):
-    msg = json.loads(body)
-    username = msg['username']
-
-    if msg['success']:
-        print(f'Account for {username} has been created.')
-    else:
-        print(f"There's some issue while creating account for {username}")
-        errmsg = msg.get('errmsg', [])
-        for err in errmsg:
-            print(err)
-
-    rc_util.rc_rmq.stop_consume()
-    rc_util.rc_rmq.delete_queue()
+def gen_f(room):
+    def callback(channel, method, properties, body):
+        msg = json.loads(body)
+        username = msg['username']
+
+        if msg['success']:
+            print(f'Account for {username} has been created.')
+            send_msg('account ready', room)
+        else:
+            print(f"There's some issue while creating account for {username}")
+            errmsg = msg.get('errmsg', [])
+            for err in errmsg:
+                print(err)
+            socketio.emit('account error', errmsg, room= room)
+
+        rc_util.rc_rmq.stop_consume()
+        rc_util.rc_rmq.delete_queue()
+    return callback
 
 def send_msg(event, room):
-   print("Post '{}' to room '{}'".format(event,room))
-   socketio.emit(event, room=room)
+    socketio.emit(event, room=room)
 
 def timeout_handler(signum, frame):
     print("Process timeout, there's might some issue with agents")
@@ -53,11 +56,8 @@ def celery_create_account(json, session):
     rc_util.add_account(username, email, fullname, reason)
     print('sent account info')
     
-    # Set initial timeout timer
-    signal.signal(signal.SIGALRM, timeout_handler)
-    signal.setitimer(signal.ITIMER_REAL, timeout)
-
 
     print('Waiting for completion...')
-    rc_util.consume(username, routing_key=f'complete.{username}', callback=callback)
-    send_msg('account ready', room) 
+    #print(callback(self.EXCHANGE, self.EXCHANGE,self.EXCHANGE,self.EXCHANGE))
+    rc_util.consume(username, routing_key=f'complete.{username}', callback=gen_f(room))    
+    #send_msg('account ready', room) 
-- 
GitLab