Skip to content

[py] Refactored server.py in a more pythonic approach. #15840

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Jun 13, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 42 additions & 18 deletions py/selenium/webdriver/remote/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,49 +57,73 @@ def __init__(self, host=None, port=4444, path=None, version=None, log_level="INF
raise TypeError("Not allowed to specify a version when using an existing server path")

self.host = host
self.port = self._validate_port(port)
self.path = self._validate_path(path)
self.version = self._validate_version(version)
self.log_level = self._validate_log_level(log_level)
self.env = self._validate_env(env)

self.port = port
self.path = path
self.version = version
self.log_level = log_level
self.env = env
self.process = None
self.status_url = self._get_status_url()

def _get_status_url(self):
@property
def status_url(self):
host = self.host if self.host is not None else "localhost"
return f"http://{host}:{self.port}/status"

def _validate_path(self, path):
@property
def path(self):
return self._path

@path.setter
def path(self, path):
if path and not os.path.exists(path):
raise OSError(f"Can't find server .jar located at {path}")
return path
self._path = path

@property
def port(self):
return self._port

def _validate_port(self, port):
@port.setter
def port(self, port):
try:
port = int(port)
except ValueError:
raise TypeError(f"{__class__.__name__}.__init__() got an invalid port: '{port}'")
if not (0 <= port <= 65535):
raise ValueError("port must be 0-65535")
return port
self._port = port

def _validate_version(self, version):
@property
def version(self):
return self._version

@version.setter
def version(self, version):
if version:
if not re.match(r"^\d+\.\d+\.\d+$", str(version)):
raise TypeError(f"{__class__.__name__}.__init__() got an invalid version: '{version}'")
return version
self._version = version

@property
def log_level(self):
return self._log_level

def _validate_log_level(self, log_level):
@log_level.setter
def log_level(self, log_level):
levels = ("SEVERE", "WARNING", "INFO", "CONFIG", "FINE", "FINER", "FINEST")
if log_level not in levels:
raise TypeError(f"log_level must be one of: {', '.join(levels)}")
return log_level
self._log_level = log_level

@property
def env(self):
return self._env

def _validate_env(self, env):
@env.setter
def env(self, env):
if env is not None and not isinstance(env, collections.abc.Mapping):
raise TypeError("env must be a mapping of environment variables")
return env
self._env = env

def _wait_for_server(self, timeout=10):
start = time.time()
Expand Down