@@ -311,8 +311,8 @@ class Replane(Generic[ConfigsT]):
311311
312312 def __init__ (
313313 self ,
314- base_url : str ,
315- sdk_key : str ,
314+ base_url : str | None = None ,
315+ sdk_key : str | None = None ,
316316 * ,
317317 context : dict [str , ContextValue ] | None = None ,
318318 defaults : dict [str , Any ] | None = None ,
@@ -327,8 +327,8 @@ def __init__(
327327 """Initialize the Replane client.
328328
329329 Args:
330- base_url: Base URL of the Replane server.
331- sdk_key: SDK key for authentication.
330+ base_url: Base URL of the Replane server. Can also be provided in connect().
331+ sdk_key: SDK key for authentication. Can also be provided in connect().
332332 context: Default context for override evaluation.
333333 defaults: Default values for configs if not loaded from server.
334334 required: List of config names that must be present on init.
@@ -359,7 +359,7 @@ def __init__(
359359 logger .debug ("Default configs: %s" , list (defaults .keys ()))
360360 if required :
361361 logger .debug ("Required configs: %s" , required )
362- self ._base_url = base_url .rstrip ("/" )
362+ self ._base_url = base_url .rstrip ("/" ) if base_url else None
363363 self ._sdk_key = sdk_key
364364 # Generate replaneClientId and set it as base context.
365365 # User-provided context values take precedence (merged on top).
@@ -394,20 +394,41 @@ def __init__(
394394 self ._stream_thread : threading .Thread | None = None
395395 self ._stop_event = threading .Event ()
396396
397- def connect (self , * , wait : bool = True ) -> None :
397+ def connect (
398+ self ,
399+ base_url : str | None = None ,
400+ sdk_key : str | None = None ,
401+ * ,
402+ wait : bool = True ,
403+ ) -> None :
398404 """Connect to the Replane server and start receiving updates.
399405
400406 This starts a background thread that maintains the SSE connection.
401407
402408 Args:
409+ base_url: Base URL of the Replane server. Overrides constructor value.
410+ sdk_key: SDK key for authentication. Overrides constructor value.
403411 wait: If True, block until initial configs are loaded.
404412
405413 Raises:
414+ ValueError: If base_url or sdk_key is not provided here or in constructor.
406415 ReplaneError: If connection fails or required configs are missing.
407416 """
408417 if self ._closed :
409418 raise ClientClosedError ()
410419
420+ # Apply overrides from connect() if provided
421+ if base_url is not None :
422+ self ._base_url = base_url .rstrip ("/" )
423+ if sdk_key is not None :
424+ self ._sdk_key = sdk_key
425+
426+ # Validate required parameters
427+ if not self ._base_url :
428+ raise ValueError ("base_url is required - provide it in constructor or connect()" )
429+ if not self ._sdk_key :
430+ raise ValueError ("sdk_key is required - provide it in constructor or connect()" )
431+
411432 logger .debug ("connect() called, wait=%s" , wait )
412433
413434 self ._stream_thread = threading .Thread (
0 commit comments