diff --git a/gwsumm/segments.py b/gwsumm/segments.py index b9f66aa1..e50c6d7f 100644 --- a/gwsumm/segments.py +++ b/gwsumm/segments.py @@ -45,18 +45,12 @@ ) __author__ = 'Duncan Macleod ' - -SEGDB_URLS = [ - 'https://segdb.ligo.caltech.edu', - 'https://metaserver.phy.syr.edu', - 'https://geosegdb.atlas.aei.uni-hannover.de', - 'http://10.20.50.30' # geosegdb internal -] +__credits__ = 'Evan Goetz ' def get_segments(flag, validity=None, config=ConfigParser(), cache=None, query=True, return_=True, coalesce=True, padding=None, - ignore_undefined=False, segdb_error='raise', url=None, + ignore_undefined=False, segdb_error='raise', host=None, **read_kw): """Retrieve the segments for a given flag @@ -83,8 +77,8 @@ def get_segments(flag, validity=None, config=ConfigParser(), cache=None, - ``gps-start-time``, and ``gps-end-time``, if ``validity`` is not given - - ``url`` (the remote hostname for the segment database) if - the ``url`` keyword is not given + - ``host`` (the remote hostname for the segment database) if + the ``host`` keyword is not given cache : :class:`glue.lal.Cache`, optional a cache of files from which to read segments, otherwise segments @@ -111,7 +105,7 @@ def get_segments(flag, validity=None, config=ConfigParser(), cache=None, segments - ``'ignore'`` : silently ignore the error and return no segments - url : `str`, optional + host : `str`, optional the remote hostname for the target segment database return_ : `bool`, optional, default: `True` @@ -211,9 +205,9 @@ def get_segments(flag, validity=None, config=ConfigParser(), cache=None, new[f].active &= newsegs if coalesce: new[f].coalesce() - vprint(" Read %d segments for %s (%.2f%% coverage).\n" - % (len(new[f].active), f, - float(abs(new[f].known))/float(abs(newsegs))*100)) + cov = float(abs(new[f].known))/float(abs(newsegs))*100 + vprint(f" Read {len(new[f].active)} segments for " + f"{f} ({cov:.2f}%% coverage).\n") else: if len(newsegs) >= 10: qsegs = span @@ -221,30 +215,28 @@ def get_segments(flag, validity=None, config=ConfigParser(), cache=None, qsegs = newsegs # parse configuration for query kwargs = {} - if url is not None: - kwargs['url'] = url + if host is not None: + kwargs['host'] = host else: try: - kwargs['url'] = config.get('segment-database', 'url') + kwargs['host'] = config.get('segment-database', 'host') except (NoSectionError, NoOptionError): pass - if kwargs.get('url', None) in SEGDB_URLS: - query_func = DataQualityDict.query_segdb - else: - query_func = DataQualityDict.query_dqsegdb try: - new = query_func(allflags, qsegs, on_error=segdb_error, - **kwargs) + new = DataQualityDict.query_dqsegdb( + allflags, + qsegs, + on_error=segdb_error, + **kwargs) except Exception as e: # ignore error from SegDB if segdb_error in ['ignore', None]: pass # convert to warning elif segdb_error in ['warn']: - print('%sWARNING: %sCaught %s: %s [gwsumm.segments]' - % (WARNC, ENDC, type(e).__name__, str(e)), - file=sys.stderr) - warnings.warn('%s: %s' % (type(e).__name__, str(e))) + print(f"{WARNC}WARNING: {ENDC}Caught {type(e).__name__}: " + f"{str(e)} [gwsumm.segments]", file=sys.stderr) + warnings.warn(f"{type(e).__name__}: {str(e)}") # otherwise raise as normal else: raise @@ -254,9 +246,9 @@ def get_segments(flag, validity=None, config=ConfigParser(), cache=None, new[f].active &= newsegs if coalesce: new[f].coalesce() - vprint(" Downloaded %d segments for %s (%.2f%% coverage).\n" - % (len(new[f].active), f, - float(abs(new[f].known))/float(abs(newsegs))*100)) + cov = float(abs(new[f].known))/float(abs(newsegs))*100 + vprint(f" Downloaded {len(new[f].active)} segments for " + f"{f} ({cov:.2f}%% coverage).\n") # record new segments globalv.SEGMENTS += new for f in new: diff --git a/gwsumm/state/core.py b/gwsumm/state/core.py index f5c64310..b660714b 100644 --- a/gwsumm/state/core.py +++ b/gwsumm/state/core.py @@ -64,14 +64,17 @@ class SummaryState(DataQualityFlag): logical combination of flags that define known and active segments for this state (see :attr:`documentation ` for details) + hours : optional key : `str`, optional registry key for this state, defaults to :attr:`~SummaryState.name` + filename : `str`, optional + host : `str`, optional """ MATH_DEFINITION = re.compile(r'(%s)' % '|'.join(MATHOPS.keys())) def __init__(self, name, known=SegmentList(), active=SegmentList(), description=None, definition=None, hours=None, key=None, - filename=None, url=None): + filename=None, host=None): """Initialise a new `SummaryState` """ # allow users to specify known as (start, end) @@ -88,7 +91,7 @@ def __init__(self, name, known=SegmentList(), active=SegmentList(), self.definition = None self.key = key self.hours = hours - self.url = url + self.host = host if known and active: self.ready = True else: @@ -244,7 +247,7 @@ def from_ini(cls, config, section): return cls(name, known=[(start, end)], hours=hours, **params) def _fetch_segments(self, config=GWSummConfigParser(), **kwargs): - kwargs.setdefault('url', self.url) + kwargs.setdefault('host', self.host) segs = get_segments([self.definition], self.known, config=config, **kwargs)[self.definition].round(contract=True) self.known = segs.known diff --git a/pyproject.toml b/pyproject.toml index a22b02f6..527bd7f3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -37,10 +37,11 @@ classifiers = [ ] dependencies = [ - "astropy >=3.0.0", + "astropy >=5.0.0", + "dqsegdb2 >=1.2.0", "gwdatafind >=1.1.1", "gwdetchar >=2.2.7", - "gwpy >=2.0.0, <=3.0.8", + "gwpy >=3.0.10", "gwtrigfind", "lalsuite", "ligo-segments", @@ -48,12 +49,12 @@ dependencies = [ "lxml", "markdown", "MarkupPy", - "matplotlib >=3.5", - "numpy >=1.16,<2.0", + "matplotlib >=3.1.0,<=3.7.1", + "numpy >=1.19.5", "pygments >=2.7.0", "python-dateutil", "python-ligo-lw", - "scipy >=1.2.0, <1.14", + "scipy >=1.6.0", ] dynamic = ["version"]