Session usage

All of the functions introduced in the Top-level API accept a session keyword to enable reusing a connection to a GWDataFind host.

For example:

Example use of a gwdatafind.Session to reuse a connection.
>>> from gwdatafind import (
...     find_observatories,
...     find_urls,
...     Session,
... )
>>> with Session() as sess:
...     obs = find_observatories(
...         host="datafind.gw-openscience.org",
...         session=sess,
...     )
...     print(obs)
...     urls = {}
...     for ifo in obs:
...         urls[ifo] = find_urls(
...             ifo,
...             "{}1_GWOSC_O2_4KHZ_R1".format(ifo),
...             1187008880,
...             1187008884,
...             host="datafind.gw-openscience.org",
...             session=sess,
...         )
...     print(urls)
['H', 'V', 'L']
{'H': ['file://localhost/cvmfs/gwosc.osgstorage.org/gwdata/O2/strain.4k/frame.v1/H1/1186988032/H-H1_GWOSC_O2_4KHZ_R1-1187008512-4096.gwf'],
 'V': ['file://localhost/cvmfs/gwosc.osgstorage.org/gwdata/O2/strain.4k/frame.v1/V1/1186988032/V-V1_GWOSC_O2_4KHZ_R1-1187008512-4096.gwf'],
 'L': ['file://localhost/cvmfs/gwosc.osgstorage.org/gwdata/O2/strain.4k/frame.v1/L1/1186988032/L-L1_GWOSC_O2_4KHZ_R1-1187008512-4096.gwf']}

In the above example the connection to datafind.gw-openscience.org is held open and reused to simplify subsequent queries and minimise the risk of network communication issues.

The gwdatafind.Session object is just an import of igwn_auth_utils.Session, a wrapper around requests.Session that automatically handles IGWN authorisation credentials/tokens. For more details on credential or token usage, see Authentication and authorisation.