schrodinger.application.livedesign.ldclient_proxy module

LDClient proxy module to maintain global access of LDClient in the entire session. Proxy delegates attribute access to the underlying LDClient instance and so can be used as a drop-in replacement for LDClient.

Proxy will notify listeners when the underlying LDClient instance is changed. Listeners should reload any data that depends on the LDClient instance. See LDClientProxy for example usage.

Users should ensure ldclient package is installed and importable.

class schrodinger.application.livedesign.ldclient_proxy.Version(major, minor)

Bases: tuple

major

Alias for field number 0

minor

Alias for field number 1

class schrodinger.application.livedesign.ldclient_proxy.LDMode(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)

Bases: str, enum.Enum

Enumerate the different LiveDesign modes.

DRUG_DISCOVERY = 'DRUG_DISCOVERY'
MATERIALS_SCIENCE = 'MATERIALS_SCIENCE'
class schrodinger.application.livedesign.ldclient_proxy.LDConnectionStatus(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)

Bases: enum.Enum

NOT_SIGNED_IN = 0
CONNECTED = 1
DISCONNECTED = 2
exception schrodinger.application.livedesign.ldclient_proxy.LDClientConnectionError

Bases: Exception

Exception when connection to LiveDesign fails.

class schrodinger.application.livedesign.ldclient_proxy.LDClientProxy(*args, **kwargs)

Bases: PyQt6.QtCore.QObject

Proxy class for LDClient. It’s a singleton class that will delegate attribute access to the underlying LDClient instance when one is connected.

Example usage for users fetching/uploading data from/to LiveDesign,

Usage:

class LDProjectsManager:

    def __init__(self):
        self.projects = []
        self.ld_client = ldclient_proxy.LDClientProxy.getInstance()
        self.ld_client.connectionChanged.connect(self._reloadProjects)

    def _reloadProjects(self):
        # Get projects from the new LiveDesign server.
        projects = []
        if ld_client.check_connection():
            projects = ld_client.projects()
        self.projects = projects

Example usage for users connecting/disconnecting from LiveDesign,

Usage:

ld_client = ldclient_proxy.LDClientProxy.getInstance()
ld_client.connect(
    host='https://livedesign.schrodinger.com',
    username='username',
    password='password',
)
# Disconnect and log out from LiveDesign.
ld_client.changeConnectionStatus(ldclient_proxy.LDConnectionStatus.NOT_SIGNED_IN)
Variables
  • connectionChanged (QtCore.pyqtSignal) – Signal emitted when the underlying LDClient instance is changed on connecting to a LiveDesign server or disconnecting from the current LiveDesign server. Listeners should reload any data that depends on the LDClient instance.

  • connectToLiveDesignRequested (QtCore.pyqtSignal) – Signal emitted when we try to access attribute on underlying LDClient instance but aren’t connected.

  • connectionFailed (QtCore.pyqtSignal) – Signal emitted when we try to access attribute on underlying LDClient instance but the network is not available or LiveDesign server cannot be reached.

connectionChanged

pyqtSignal(*types, name: str = …, revision: int = …, arguments: Sequence = …) -> PYQT_SIGNAL

types is normally a sequence of individual types. Each type is either a type object or a string that is the name of a C++ type. Alternatively each type could itself be a sequence of types each describing a different overloaded signal. name is the optional C++ name of the signal. If it is not specified then the name of the class attribute that is bound to the signal is used. revision is the optional revision of the signal that is exported to QML. If it is not specified then 0 is used. arguments is the optional sequence of the names of the signal’s arguments.

connectToLiveDesignRequested

pyqtSignal(*types, name: str = …, revision: int = …, arguments: Sequence = …) -> PYQT_SIGNAL

types is normally a sequence of individual types. Each type is either a type object or a string that is the name of a C++ type. Alternatively each type could itself be a sequence of types each describing a different overloaded signal. name is the optional C++ name of the signal. If it is not specified then the name of the class attribute that is bound to the signal is used. revision is the optional revision of the signal that is exported to QML. If it is not specified then 0 is used. arguments is the optional sequence of the names of the signal’s arguments.

connectionFailed

pyqtSignal(*types, name: str = …, revision: int = …, arguments: Sequence = …) -> PYQT_SIGNAL

types is normally a sequence of individual types. Each type is either a type object or a string that is the name of a C++ type. Alternatively each type could itself be a sequence of types each describing a different overloaded signal. name is the optional C++ name of the signal. If it is not specified then the name of the class attribute that is bound to the signal is used. revision is the optional revision of the signal that is exported to QML. If it is not specified then 0 is used. arguments is the optional sequence of the names of the signal’s arguments.

classmethod getInstance() schrodinger.application.livedesign.ldclient_proxy.LDClientProxy

Get singleton LDClientProxy instance.

connect(host: str, username: Optional[str] = None, password: Optional[str] = None, token: Optional[str] = None, compatibility_mode: Optional[schrodinger.application.livedesign.ldclient_proxy.Version] = Version(major=2023, minor=3))

Connect to LiveDesign and notify listeners. Username and password or refresh token is required to log in.

See _create_ld_client() for argument documentation.

disconnect()

Logout and disconnect from LiveDesign and notify listeners if required.

set_connection_status(status: schrodinger.application.livedesign.ldclient_proxy.LDConnectionStatus)

Set the connection status of LDClient Proxy and notify listeners.

get_connection_status()

Get the connection status. In case of running in maestro, it will be updating pereodically via ld_connection_checker thread. Otherwise, it will be updated once we face any connection issue while calling any ldclient API.

check_connection() bool

Check if LDClient instance is available.

get_host() Optional[str]
get_username() Optional[str]

Return user connected to LiveDesign if connected else None.

get_token() Optional[str]
get_password() Optional[str]
get_LD_version() Optional[schrodinger.application.livedesign.ldclient_proxy.Version]

Version of the LD Server if connected, else None.

get_config_key_value_dict() Optional[dict[str, str]]

Return the config key-value pairs as a dictionary.

get_LD_mode() Optional[str]

Return the LD instance mode. For example, if the instance is in DRUG_DISCOVERY or MATERIAL_SCIENCE mode, etc. Note, that for older LD versions (< 8.6), there was no concept of a LD mode, and thus we assume the default mode of DRUG_DISCOVERY.

Checks if the current LD server supports structure group search

Returns

True/False if supported, None if not connected to LD.

__init__(*args, **kwargs)
af2SettingsGetValue()
af2SettingsSetValue(value)