def mdpset_to_layer( self, parser: Union[BasicTextParser, QuakeMlParser] ) -> QgsVectorLayer: # pylint:disable=too-many-branches """ Returns a new vector layer containing the reply contents """ vl = self._create_empty_mdp_layer() features = [] for f in parser.create_mdp_features(self.output_fields, self.preferred_mdp_only): features.append(f) ok, _ = vl.dataProvider().addFeatures(features) assert ok mdp_style_url = StyleUtils.style_url( self.styles[SERVICE_MANAGER.MACROSEISMIC] ) if SERVICE_MANAGER.MACROSEISMIC in self.styles else None if self.url: default_style_url = mdp_style_url or StyleUtils.default_style_for_macro_url( ) err = StyleUtils.fetch_and_apply_style(vl, default_style_url) if err: self.message.emit(err, Qgis.Warning) elif self.service_config.get('mdpstyleurl'): err = StyleUtils.fetch_and_apply_style( vl, mdp_style_url or self.service_config.get('mdpstyleurl')) if err: self.message.emit(err, Qgis.Warning) elif isinstance(self.service_config.get('default', {}).get('style', {}), dict) and \ self.service_config['default']['style'].get('mdp'): style_url = None style = self.service_config['default']['style']['mdp'] if mdp_style_url: style_url = mdp_style_url else: style_ref = style.get('style') if style_ref: style_url = SERVICE_MANAGER.get_style(style_ref)['url'] if style_url: if isinstance(self.result, BasicTextParser): style_attr = style.get('classified_attribute_text') else: style_attr = self.result.remap_attribute_name( SERVICE_MANAGER.MACROSEISMIC, style.get('classified_attribute_xml')) err = StyleUtils.fetch_and_apply_style(vl, style_url, style_attr) if err: self.message.emit(err, Qgis.Warning) return vl
def stations_to_layer(self, fdsn: Optional[Fdsn]) -> QgsVectorLayer: # pylint:disable=too-many-branches """ Returns a new vector layer containing the reply contents """ vl = self._create_empty_stations_layer() features = [] if self.output_type == Fetcher.BASIC: for f in self.result.create_station_features(): features.append(f) else: features.extend(fdsn.to_station_features(self.output_fields)) ok, _ = vl.dataProvider().addFeatures(features) assert ok station_style_url = StyleUtils.style_url( self.styles[SERVICE_MANAGER.FDSNSTATION] ) if SERVICE_MANAGER.FDSNSTATION in self.styles else None if station_style_url or self.service_config.get('styleurl'): err = StyleUtils.fetch_and_apply_style( vl, station_style_url or self.service_config.get('styleurl')) if err: self.message.emit(err, Qgis.Warning) elif isinstance(self.service_config.get('default', {}).get('style', {}), dict) and \ self.service_config['default']['style'].get('stations'): style = self.service_config['default']['style']['stations'] style_url = None if station_style_url: style_url = station_style_url else: style_ref = style.get('style') if style_ref: style_url = SERVICE_MANAGER.get_style(style_ref)['url'] if style_url: if isinstance(self.result, BasicTextParser): style_attr = style.get('classified_attribute_text') else: style_attr = FDSNStationXMLParser.remap_attribute_name( style.get('classified_attribute_xml')) err = StyleUtils.fetch_and_apply_style(vl, style_url, style_attr) if err: self.message.emit(err, Qgis.Warning) return vl
def _populate_style_combo(combo, service_type: str): """ Populates a style combo with matching styles of the specified type """ prev_entry = combo.currentText() combo.clear() styles = SERVICE_MANAGER.styles_for_service_type(service_type) for s in styles: combo.addItem(SERVICE_MANAGER.get_style(s)['label'], s) prev_index = combo.findData(prev_entry) if prev_index >= 0: combo.setCurrentIndex(prev_index) else: combo.setCurrentIndex(0)
def __init__( self, iface, # pylint: disable=unused-argument,too-many-branches,too-many-statements service_type: str, service_id: str, parent: Optional[QWidget] = None): """Constructor.""" super().__init__(parent) self.setupUi(self) self.qml_style_name_combo_events.addItem('') self.qml_style_name_combo_mdp.addItem('') self.qml_style_name_combo_stations.addItem('') self.label_qml_events.setVisible( service_type in (SERVICE_MANAGER.FDSNEVENT, SERVICE_MANAGER.MACROSEISMIC)) self.qml_style_url_edit_events.setVisible( service_type in (SERVICE_MANAGER.FDSNEVENT, SERVICE_MANAGER.MACROSEISMIC)) self.label_preset_style_events.setVisible( service_type in (SERVICE_MANAGER.FDSNEVENT, SERVICE_MANAGER.MACROSEISMIC)) self.qml_style_name_combo_events.setVisible( service_type in (SERVICE_MANAGER.FDSNEVENT, SERVICE_MANAGER.MACROSEISMIC)) self.label_mdp_url.setVisible( service_type == SERVICE_MANAGER.MACROSEISMIC) self.qml_style_url_edit_mdp.setVisible( service_type == SERVICE_MANAGER.MACROSEISMIC) self.qml_style_name_combo_mdp.setVisible( service_type == SERVICE_MANAGER.MACROSEISMIC) self.mdp_preset_label.setVisible( service_type == SERVICE_MANAGER.MACROSEISMIC) self.label_stations_url.setVisible( service_type == SERVICE_MANAGER.FDSNSTATION) self.qml_style_url_edit_stations.setVisible( service_type == SERVICE_MANAGER.FDSNSTATION) self.label_preset_name_stations.setVisible( service_type == SERVICE_MANAGER.FDSNSTATION) self.qml_style_name_combo_stations.setVisible( service_type == SERVICE_MANAGER.FDSNSTATION) for name in SERVICE_MANAGER.styles_for_service_type( SERVICE_MANAGER.FDSNEVENT): self.qml_style_name_combo_events.addItem( SERVICE_MANAGER.get_style(name)['label'], name) for name in SERVICE_MANAGER.styles_for_service_type( SERVICE_MANAGER.MACROSEISMIC): self.qml_style_name_combo_mdp.addItem( SERVICE_MANAGER.get_style(name)['label'], name) for name in SERVICE_MANAGER.styles_for_service_type( SERVICE_MANAGER.FDSNSTATION): self.qml_style_name_combo_stations.addItem( SERVICE_MANAGER.get_style(name)['label'], name) self.service_type = service_type self.service_id = service_id self.start_date_edit.setDisplayFormat("yyyy-MM-dd HH:mm:ss") self.end_date_edit.setDisplayFormat("yyyy-MM-dd HH:mm:ss") if service_id in SERVICE_MANAGER.available_services(service_type): config = SERVICE_MANAGER.service_details(service_type, service_id) else: # this is the default configuration for a newly created service! config = {'settings': {'outputxml': True, 'httpcodenodata': True}} self.set_state_from_config(config) self.title_edit.textChanged.connect(self._changed) self.web_service_url_edit.textChanged.connect(self._changed) self.combo_http_code_nodata.addItem('204', '204') for _, w in self.WIDGET_MAP.items(): widget = getattr(self, w) if isinstance(widget, QCheckBox): widget.toggled.connect(self._changed) elif isinstance(widget, QSpinBox): widget.valueChanged.connect(self._changed) self.check_http_code_nodata.toggled.connect(self._changed) self.combo_http_code_nodata.currentIndexChanged.connect(self._changed) if self.service_type in (SERVICE_MANAGER.WMS, SERVICE_MANAGER.WFS, SERVICE_MANAGER.WCS): for w in [self.group_capabilities, self.group_bounding_box]: w.setEnabled(False) w.hide() else: self.group_ogc_layers.setEnabled(False) self.group_ogc_layers.hide() self.group_label.hide() self.group_edit.hide() if self.service_type == SERVICE_MANAGER.FDSNSTATION: for w in [ self.check_filter_by_eventid, self.check_filter_by_originid, self.check_filter_by_magnitudeid, self.check_filter_by_focalmechanismid, self.check_filter_by_catalog, self.check_filter_by_contributor, self.check_filter_by_contributorid, self.check_filter_by_event_type, self.check_filter_by_magnitude_type, self.check_can_include_all_origins, self.check_can_include_all_magnitudes, self.check_can_include_all_origins_multiple, self.check_can_include_all_magnitudes_multiple, self.check_can_include_arrivals, self.check_can_include_all_stations_magnitudes, self.check_has_limit_of_entries, self.spin_has_limit_of_entries, self.check_can_filter_by_depth ]: w.setEnabled(False) self.button_load_service.clicked.connect(self._load_service) self._changed()
def style_url(style_name: str) -> str: """ Returns the URL for the matching style """ return SERVICE_MANAGER.get_style(style_name)['url']
def events_to_layer( self, # pylint: disable=too-many-locals,too-many-branches parser: Union[BasicTextParser, QuakeMlParser], preferred_origin_only: bool, preferred_magnitudes_only: bool) -> Optional[QgsVectorLayer]: """ Returns a new vector layer containing the reply contents """ vl = self._create_empty_event_layer() features = [] try: for f in parser.create_event_features(self.output_fields, preferred_origin_only, preferred_magnitudes_only): features.append(f) except MissingOriginException as e: self.message.emit(str(e), Qgis.Critical) return None ok, _ = vl.dataProvider().addFeatures(features) assert ok epicenter_style_url = StyleUtils.style_url( self.styles[SERVICE_MANAGER.FDSNEVENT] ) if SERVICE_MANAGER.FDSNEVENT in self.styles else None if self.url: default_style_url = epicenter_style_url or StyleUtils.default_style_for_events_url( ) err = StyleUtils.fetch_and_apply_style(vl, default_style_url) if err: self.message.emit(err, Qgis.Warning) elif not self.url and (epicenter_style_url or self.service_config.get('styleurl')): err = StyleUtils.fetch_and_apply_style( vl, epicenter_style_url or self.service_config.get('styleurl')) if err: self.message.emit(err, Qgis.Warning) elif not self.url and ( epicenter_style_url or (isinstance( self.service_config.get('default', {}).get('style', {}), dict) and self.service_config['default']['style'].get('events'))): style_url = None if epicenter_style_url: style_url = epicenter_style_url else: style = self.service_config['default']['style']['events'] style_ref = style.get('style') if style_ref: style_url = SERVICE_MANAGER.get_style(style_ref)['url'] if style_url: if isinstance(self.result, BasicTextParser): style_attr = style.get('classified_attribute_text') else: style_attr = self.result.remap_attribute_name( SERVICE_MANAGER.FDSNEVENT, style.get('classified_attribute_xml')) err = StyleUtils.fetch_and_apply_style(vl, style_url, style_attr) if err: self.message.emit(err, Qgis.Warning) return vl