schrodinger.application.glide.http_server module¶
Glide HTTP Server
This module implements the functions necessary to turn Glide into a persistent HTTP server that accepts ligands via POST requests and sends the poses back.
To use, just add the following lines to a Glide input file:
CLIENT_MODULE schrodinger.application.glide.http_server CLIENT_OPTIONS “host=localhost; port=8000”
The server may then be tested using a web browser by opening http://localhost:8000/. For programmatic access, see schrodinger.application.glide.http_client.py.
The server responds to the following paths:
/ a form that can be used for testing from a browser /shutdown break out of the ligand loop and terminate /dock_ligand POST a ligand and get the poses back
NOTE: the server is single-threaded, single-process, hence it’s not designed to accept concurrent connections. While Glide is busy docking a ligand, the server won’t be accepting connections. This server is meant for uses where there is a single client that only needs to do one ligand at a time!
- schrodinger.application.glide.http_server.get_attachment(headers: dict[str, str], rfile: io.BufferedIOBase, name: str) str ¶
Get a file attachment sent from an HTML form via POST request.
- Parameters
headers – HTTP headers
rfile – body of HTTP request as a file-like object
name – value of the
name
property of the <input> HTML element for the file that we want
- Returns
body of the file as a string, or None if
name
was not found in the form data
- class schrodinger.application.glide.http_server.GlideHTTPHandler(request, client_address, server)¶
Bases:
http.server.BaseHTTPRequestHandler
This class, derived from BaseHTTPRequestHandler, implements the do_GET and do_POST methods. Unlike the parent class, this handler does not “finish” immediately after calling do_GET/do_POST, but waits until glide_finish() is called.
Properties:
- Variables
glide_data (dict[str, list]) – a dictionary containing the posted form data.
glide_stop (bool) – a boolean, set to True if the client asked us to stop.
- glide_data = Ellipsis¶
- glide_stop = Ellipsis¶
- setup()¶
- do_POST()¶
- do_GET()¶
- glide_send_response(ctype, body)¶
Convenience method to send the response line, content-type header, and body in just one call.
- finish()¶
- glide_finish()¶
Finish the handler by calling the finish() method from the parent class. Among other things, this closes the connection.
- class schrodinger.application.glide.http_server.GlideHTTPServer(server_address, RequestHandlerClass, bind_and_activate=True)¶
Bases:
http.server.HTTPServer
This is a variant on HTTPServer that doesn’t shut down requests immediately, but keeps them around until glide_shutdown_request is called. This allows us to split the processing of the request into two steps: one to get the request, and the other to respond to it.
In the meantime, the handler object is kept around in the glide_http_handler property.
- Variables
glide_http_handler (GlideHTTPHandler) – The request handler.
glide_request (socket) – The request object.
glide_timeout (bool) – Whether the request has timed out.
- glide_http_handler = Ellipsis¶
- glide_request = Ellipsis¶
- glide_timeout = Ellipsis¶
- finish_request(request, client_address)¶
Finish one request by instantiating RequestHandlerClass.
- shutdown_request(request)¶
Called to shutdown and close an individual request.
- glide_shutdown_request()¶
Shut down the current request by calling the shutdown_request method from the parent class.
- handle_request()¶
Handle one request, possibly blocking.
Respects self.timeout.
- handle_timeout()¶
Called if no new request arrives within self.timeout.
Overridden by ForkingMixIn.
- schrodinger.application.glide.http_server.start(options)¶
Start the HTTP server. Takes a string as an argument that may specify the host and port as, for example, “host=localhost; port=8000; timeout=0”. These are in fact the default values. To accept connections from remote hosts, set host to an empty string (i.e., “host=”). If the timeout value is greater than zero, pull_ligand will return -1, indicating no more ligands, after waiting for that time in seconds.
- schrodinger.application.glide.http_server.get_config_as_json(ip_addr, port, backend=None)¶
Return the body of the config file as a JSON string.
- Parameters
ip_addr (str) – server IP address
port (int) – server port
backend (schrodinger.job.jobcontrol._Backend or NoneType) – optional jobcontrol backend object
- schrodinger.application.glide.http_server.write_config(httpd)¶
Write a JSON file with host and port information so the client knows that the server is ready and where to connect. This is particularly needed when using automated port selection.
When running under job control as a Glide job, the file is copied back to the launch directory immediately.
- schrodinger.application.glide.http_server.pull_ligand()¶
Wait until someone POSTs a ligand and return its mmct handle. If we were asked to shut down by the client, return -1.
- schrodinger.application.glide.http_server.push_ligand(pose_handles, msg)¶
Send the HTTP response as an m2io file of docked poses. Takes an array of mmct handles and an error message (the latter is currently unused.)
- Parameters
pose_handles – mmct handles for docked poses
msg (str) – status message from Glide
- Type
iterable of int
- schrodinger.application.glide.http_server.stop()¶
Delete the HTTP server object and stop listening.
- schrodinger.application.glide.http_server.get_reflig()¶
Return the mmct handle to the new reference ligand (MMCT_INVALID_CT if there’s no new reference ligand). The handle is then owned by the caller and the function call has the side effect of making this module forget the current handle.
- Returns
mmct handle
- Return type
int