Source code for digideep.utility.visdom_engine.WebServer

import visdom.server
# from visdom import server
# import threading
from threading import Thread
import asyncio
import hashlib
import uuid
from os.path import expanduser

DEFAULT_ENV_PATH = '%s/.visdom/' % expanduser("~")

[docs]class VisdomWebServer(object): """ This class runs a Visdom Server. Args: port (int): Port for server to run on. enable_login (bool): Whether to activate login screen for the server. username (str): The username for login. password (str): The password for login. A hashed version of the password will be stored in the Visdom settings. cookie_secret (str): A unique string to be used as a cookie for the server. """ def __init__(self, port=8097, enable_login=False, username='visdom', password='visdom', cookie_secret='visdom@d1c11598d2fb'): self.port = port self.enable_login = enable_login self.username = username self.password = password self.cookie_secret = cookie_secret thread = Thread(target=self.run, args=()) thread.daemon = True thread.start() def _hash_password(self, password): """Hashing Password with SHA-256""" return hashlib.sha256(password.encode("utf-8")).hexdigest() def _set_cookie(self, cookie_secret): with open(DEFAULT_ENV_PATH + "COOKIE_SECRET", "w") as cookie_file: cookie_file.write(cookie_secret) def _start_server(self): if self.enable_login: user_credential = { "username": self.username, "password": self._hash_password(self._hash_password(self.password)) } self._set_cookie(self.cookie_secret) else: user_credential = None visdom.server.start_server(port=self.port, env_path=DEFAULT_ENV_PATH, user_credential=user_credential)
[docs] def run(self): """ Method that runs forever """ asyncio.set_event_loop(asyncio.new_event_loop()) self._start_server()