erdc / pyuit

Python module for creating PBS scripts and interacting with the UIT Plus web service

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Flask server address error

kcpevey opened this issue · comments

If I have a notebook that is attempting to run/authenticate uit, and I open up a second notebook, I will get the following error. Might want to consider randomizing the flask server address to avoid this error:

---------------------------------------------------------------------------
OSError                                   Traceback (most recent call last)
<ipython-input-3-b1a9d2b782d4> in <module>
----> 1 c.authenticate(notebook=True)

~/miniconda3/envs/adhui0715/lib/python3.6/site-packages/uit/uit.py in authenticate(self, notebook, width, height, callback)
    199 
    200         # start flask server
--> 201         start_server(self.get_token, self.config_file)
    202 
    203         auth_url = self.get_auth_url()

~/miniconda3/envs/adhui0715/lib/python3.6/site-packages/uit/uit.py in start_server(auth_func, config_file)
    619 def start_server(auth_func, config_file):
    620     app = Flask('get_uit_token')
--> 621     server = ServerThread(app)
    622     server.start()
    623 

~/miniconda3/envs/adhui0715/lib/python3.6/site-packages/uit/uit.py in __init__(self, app)
    606     def __init__(self, app):
    607         threading.Thread.__init__(self)
--> 608         self.srv = make_server('127.0.0.1', 5000, app)
    609         self.ctx = app.app_context()
    610         self.ctx.push()

~/miniconda3/envs/adhui0715/lib/python3.6/site-packages/werkzeug/serving.py in make_server(host, port, app, threaded, processes, request_handler, passthrough_errors, ssl_context, fd)
    818     else:
    819         return BaseWSGIServer(
--> 820             host, port, app, request_handler, passthrough_errors, ssl_context, fd=fd
    821         )
    822 

~/miniconda3/envs/adhui0715/lib/python3.6/site-packages/werkzeug/serving.py in __init__(self, host, port, app, handler, passthrough_errors, ssl_context, fd)
    696         if self.address_family == af_unix and os.path.exists(server_address):
    697             os.unlink(server_address)
--> 698         HTTPServer.__init__(self, server_address, handler)
    699 
    700         self.app = app

~/miniconda3/envs/adhui0715/lib/python3.6/socketserver.py in __init__(self, server_address, RequestHandlerClass, bind_and_activate)
    451         if bind_and_activate:
    452             try:
--> 453                 self.server_bind()
    454                 self.server_activate()
    455             except:

~/miniconda3/envs/adhui0715/lib/python3.6/http/server.py in server_bind(self)
    134     def server_bind(self):
    135         """Override server_bind to store the server name."""
--> 136         socketserver.TCPServer.server_bind(self)
    137         host, port = self.server_address[:2]
    138         self.server_name = socket.getfqdn(host)

~/miniconda3/envs/adhui0715/lib/python3.6/socketserver.py in server_bind(self)
    465         if self.allow_reuse_address:
    466             self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
--> 467         self.socket.bind(self.server_address)
    468         self.server_address = self.socket.getsockname()
    469 

OSError: [Errno 48] Address already in use
commented

I actually had implemented this at one point, but the problem is that the UIT+ settings have to have a callback URL which specifies the port, so the Flask server can be started on a random port, but then it won't receive the UIT+ callback with the token. I haven't worked out a great solution for this issue yet.

Try implementing this feature on ubuntu