from plexapi.myplex import MyPlexAccount from plexapi.server import PlexServer from urllib.parse import urlparse def connect_plex(config, username, password, url, port="32400"): """Return a connected PlexServer instance and update config with token and server info.""" token = config.get("token") if not token: account = MyPlexAccount(username, password) token = account.authenticationToken config["token"] = token parsed = urlparse(url) if parsed.scheme in ("http", "https"): netloc = parsed.netloc or parsed.path if ":" not in netloc and port: netloc = f"{netloc}:{port}" base_url = f"{parsed.scheme}://{netloc}" else: base_url = f"http://{url}:{port}" server = PlexServer(base_url, token) config.update({"server_url": url, "server_port": port}) return server