def preload_wms(urls): """ This method accesses a list of WMS servers and load their capability documents. :param urls: List of URLs """ pdlg = QtWidgets.QProgressDialog("Preloading WMS servers...", "Cancel", 0, len(urls)) pdlg.reset() pdlg.setValue(0) pdlg.setModal(True) pdlg.show() QtWidgets.QApplication.processEvents() for i, base_url in enumerate(urls): pdlg.setValue(i) QtWidgets.QApplication.processEvents() # initialize login cache from config file, but do not overwrite existing keys for key, value in config_loader(dataset="WMS_login").items(): if key not in constants.WMS_LOGIN_CACHE: constants.WMS_LOGIN_CACHE[key] = value username, password = constants.WMS_LOGIN_CACHE.get(base_url, (None, None)) try: request = requests.get(base_url) if pdlg.wasCanceled(): break wms = wms_control.MSSWebMapService(request.url, version='1.1.1', username=username, password=password) wms_control.WMS_SERVICE_CACHE[wms.url] = wms logging.info("Stored WMS info for '%s'", wms.url) except Exception as ex: logging.error("Error in preloading '%s': '%s'", type(ex), ex) if pdlg.wasCanceled(): break logging.debug("Contents of WMS_SERVICE_CACHE: %s", wms_control.WMS_SERVICE_CACHE.keys()) pdlg.close()
def test_xml_separate_leafs(self): testxml = self.xml.format( self.dimext_inittime, self.srs_base, self.dimext_time + self.dimext_elevation) self.window.activate_wms(wc.MSSWebMapService(None, version='1.1.1', xml=testxml)) QtWidgets.QApplication.processEvents() assert [self.window.cbValidTime.itemText(i) for i in range(self.window.cbValidTime.count())] == \ ['2012-10-17T12:00:00Z', '2012-10-17T18:00:00Z', '2012-10-18T00:00:00Z'] assert [self.window.cbInitTime.itemText(i) for i in range(self.window.cbInitTime.count())] == \ ['2012-10-16T12:00:00Z', '2012-10-17T12:00:00Z']
def test_xml_no_validtime(self): testxml = self.xml.format("", self.srs_base, self.dimext_inittime + self.dimext_elevation) self.window.activate_wms(wc.MSSWebMapService(None, version='1.1.1', xml=testxml)) QtWidgets.QApplication.processEvents() assert [self.window.cbValidTime.itemText(i) for i in range(self.window.cbValidTime.count())] == [] assert not self.window.cbValidTime.isEnabled() assert [self.window.cbInitTime.itemText(i) for i in range(self.window.cbInitTime.count())] == \ ['2012-10-16T12:00:00Z', '2012-10-17T12:00:00Z'] assert [self.window.cbLevel.itemText(i) for i in range(self.window.cbLevel.count())] == \ ['500.0 (hPa)', '600.0 (hPa)', '700.0 (hPa)', '900.0 (hPa)']
def test_xml_time_error(self, mockbox): dimext_time_error = """ <Dimension name="TIME" units="ISO8610"> </Dimension> <Extent name="TIME"> a2012-10-17T12:00:00Z/2012-10-18T00:00:00Z/PT6H </Extent>""" testxml = self.xml.format( "", self.srs_base, dimext_time_error + self.dimext_inittime + self.dimext_elevation) self.window.activate_wms(wc.MSSWebMapService(None, version='1.1.1', xml=testxml)) QtWidgets.QApplication.processEvents() assert [self.window.cbValidTime.itemText(i) for i in range(self.window.cbValidTime.count())] == [] assert [self.window.cbInitTime.itemText(i) for i in range(self.window.cbInitTime.count())] == []
def test_xml_othertimeformat(self): dimext_time_format = """ <Dimension name="TIME" units="ISO8610"> </Dimension> <Extent name="TIME"> 2012-10-17,2012-10-18,2012-10-19 </Extent>""" testxml = self.xml.format( "", self.srs_base, dimext_time_format + self.dimext_inittime + self.dimext_elevation) self.window.activate_wms(wc.MSSWebMapService(None, version='1.1.1', xml=testxml)) QtWidgets.QApplication.processEvents() assert [self.window.cbValidTime.itemText(i) for i in range(self.window.cbValidTime.count())] == \ ['2012-10-17T00:00:00Z', '2012-10-18T00:00:00Z', '2012-10-19T00:00:00Z'] assert [self.window.cbInitTime.itemText(i) for i in range(self.window.cbInitTime.count())] == \ ['2012-10-16T12:00:00Z', '2012-10-17T12:00:00Z']
def test_xml_emptyextent(self): dimext_time_empty = """<Dimension name="TIME" units="ISO8610"> </Dimension> <Extent name="TIME"> </Extent>""" testxml = self.xml.format( "", self.srs_base, dimext_time_empty + self.dimext_inittime + self.dimext_elevation) self.window.activate_wms(wc.MSSWebMapService(None, version='1.1.1', xml=testxml)) QtWidgets.QApplication.processEvents() assert [self.window.cbValidTime.itemText(i) for i in range(self.window.cbValidTime.count())] == [] assert [self.window.cbInitTime.itemText(i) for i in range(self.window.cbInitTime.count())] == [] assert [self.window.cbLevel.itemText(i) for i in range(self.window.cbLevel.count())] == [] assert not self.window.cbLevel.isEnabled() assert not self.window.cbValidTime.isEnabled() assert not self.window.cbInitTime.isEnabled()
def test_xml_time_init_period(self): dimext_inittime_period = """ <Dimension name="INIT_TIME" units="ISO8610"> </Dimension> <Extent name="INIT_TIME"> 2012-10-17T12:00:00Z/2012-10-24T12:00:00Z/P1W </Extent>""" testxml = self.xml.format( "", self.srs_base, self.dimext_time + dimext_inittime_period + self.dimext_elevation) self.window.activate_wms(wc.MSSWebMapService(None, version='1.1.1', xml=testxml)) QtWidgets.QApplication.processEvents() assert [self.window.cbValidTime.itemText(i) for i in range(self.window.cbValidTime.count())] == \ ['2012-10-17T12:00:00Z', '2012-10-17T18:00:00Z', '2012-10-18T00:00:00Z'] assert [self.window.cbInitTime.itemText(i) for i in range(self.window.cbInitTime.count())] == \ ['2012-10-17T12:00:00Z', '2012-10-24T12:00:00Z'] assert [self.window.cbLevel.itemText(i) for i in range(self.window.cbLevel.count())] == \ ['500.0 (hPa)', '600.0 (hPa)', '700.0 (hPa)', '900.0 (hPa)']
def test_xml_time_multiperiod(self): dimext_time_period = '<Dimension name="TIME" units="ISO8610"> </Dimension> ' \ '<Extent name="TIME"> 2010-10-17T12:00:00Z/2010-11-18T00:00:00Z/P1M, ' \ '2012-10-01T12:00:00Z,2012-10-17T12:00:00Z/2012-10-18T00:00:00Z/PT12H </Extent>' testxml = self.xml.format( "", self.srs_base, dimext_time_period + self.dimext_inittime + self.dimext_elevation) self.window.activate_wms(wc.MSSWebMapService(None, version='1.1.1', xml=testxml)) QtWidgets.QApplication.processEvents() assert [self.window.cbValidTime.itemText(i) for i in range(self.window.cbValidTime.count())] == \ ['2010-10-17T12:00:00Z', '2010-11-17T12:00:00Z', '2012-10-01T12:00:00Z', '2012-10-17T12:00:00Z', '2012-10-18T00:00:00Z'] assert [self.window.cbInitTime.itemText(i) for i in range(self.window.cbInitTime.count())] == \ ['2012-10-16T12:00:00Z', '2012-10-17T12:00:00Z']
def test_xml_separatedim(self): dimext_time_dim = '<Dimension name="TIME" units="ISO8610"> </Dimension>' dimext_time_ext = \ '<Extent name="TIME"> 2012-10-17T12:00:00Z,2012-10-17T18:00:00Z,2012-10-18T00:00:00Z </Extent>' testxml = self.xml.format( dimext_time_dim, self.srs_base, dimext_time_ext + self.dimext_inittime + self.dimext_elevation) self.window.activate_wms(wc.MSSWebMapService(None, version='1.1.1', xml=testxml)) QtWidgets.QApplication.processEvents() assert [self.window.cbValidTime.itemText(i) for i in range(self.window.cbValidTime.count())] == \ ['2012-10-17T12:00:00Z', '2012-10-17T18:00:00Z', '2012-10-18T00:00:00Z'] assert [self.window.cbInitTime.itemText(i) for i in range(self.window.cbInitTime.count())] == \ ['2012-10-16T12:00:00Z', '2012-10-17T12:00:00Z'] assert [self.window.cbLevel.itemText(i) for i in range(self.window.cbLevel.count())] == \ ['500.0 (hPa)', '600.0 (hPa)', '700.0 (hPa)', '900.0 (hPa)']
def test_xml_currenttag(self): dimext_time = """ <Dimension name="TIME" units="ISO8610"> </Dimension> <Extent name="TIME"> 2014-10-17T12:00:00Z/current/P1Y </Extent>""" testxml = self.xml.format("", self.srs_base, dimext_time + self.dimext_inittime + self.dimext_elevation) self.window.activate_wms(wc.MSSWebMapService(None, version='1.1.1', xml=testxml)) QtWidgets.QApplication.processEvents() print([self.window.cbValidTime.itemText(i) for i in range(self.window.cbValidTime.count())]) assert [self.window.cbValidTime.itemText(i) for i in range(self.window.cbValidTime.count())][:4] == \ ['2014-10-17T12:00:00Z', '2015-10-17T12:00:00Z', '2016-10-17T12:00:00Z', '2017-10-17T12:00:00Z'] assert [self.window.cbInitTime.itemText(i) for i in range(self.window.cbInitTime.count())] == \ ['2012-10-16T12:00:00Z', '2012-10-17T12:00:00Z'] assert [self.window.cbLevel.itemText(i) for i in range(self.window.cbLevel.count())] == \ ['500.0 (hPa)', '600.0 (hPa)', '700.0 (hPa)', '900.0 (hPa)'] assert self.window.cbLevel.isEnabled() assert self.window.cbValidTime.isEnabled() assert self.window.cbInitTime.isEnabled()