def build_search_query( self, search_filters: models.GeonodeApiSearchFilters ) -> QtCore.QUrlQuery: query = QtCore.QUrlQuery() query.addQueryItem("limit", str(self.page_size)) query.addQueryItem("offset", str((search_filters.page - 1) * self.page_size)) if search_filters.title is not None: query.addQueryItem("title__icontains", search_filters.title) if search_filters.abstract is not None: query.addQueryItem("abstract__icontains", search_filters.abstract) if search_filters.layer_types is None: types = [ models.GeonodeResourceType.VECTOR_LAYER, models.GeonodeResourceType.RASTER_LAYER, ] else: types = search_filters.layer_types is_vector = models.GeonodeResourceType.VECTOR_LAYER in types is_raster = models.GeonodeResourceType.RASTER_LAYER in types if is_vector: query.addQueryItem("type__in", "vector") if is_raster: query.addQueryItem("type__in", "raster") if search_filters.ordering_field is not None: query.addQueryItem( "order_by", (f"{'-' if search_filters.reverse_ordering else ''}" f"{search_filters.ordering_field}"), ) return query
def detect_wfs_version(self): for widget in self._widgets_to_toggle_during_connection_test: widget.setEnabled(False) current_settings = self.get_connection_settings() query = QtCore.QUrlQuery() query.addQueryItem("service", "WFS") query.addQueryItem("request", "GetCapabilities") url = QtCore.QUrl(f"{current_settings.base_url}/gs/ows") url.setQuery(query) self.discovery_task = network.NetworkRequestTask( [network.RequestToPerform(url)], network_task_timeout=current_settings.network_requests_timeout, authcfg=current_settings.auth_config, description="Detect WFS version", ) self.discovery_task.task_done.connect( self.handle_wfs_version_detection_test) utils.show_message(self.bar, tr("Detecting WFS version..."), add_loading_widget=True) qgis.core.QgsApplication.taskManager().addTask(self.discovery_task)
def build_search_query( self, search_filters: models.GeonodeApiSearchFilters ) -> QtCore.QUrlQuery: query = QtCore.QUrlQuery() query.addQueryItem("page", str(search_filters.page)) query.addQueryItem("page_size", str(self.page_size)) if search_filters.title is not None: query.addQueryItem("filter{title.icontains}", search_filters.title) if search_filters.abstract is not None: query.addQueryItem("filter{abstract.icontains}", search_filters.abstract) if search_filters.keyword is not None: query.addQueryItem("filter{keywords.name.icontains}", search_filters.keyword) if search_filters.topic_category is not None: query.addQueryItem( "filter{category.identifier}", search_filters.topic_category.name.lower(), ) if search_filters.temporal_extent_start is not None: query.addQueryItem( "filter{temporal_extent_start.gte}", search_filters.temporal_extent_start.toString( QtCore.Qt.ISODate), ) if search_filters.temporal_extent_end is not None: query.addQueryItem( "filter{temporal_extent_end.lte}", search_filters.temporal_extent_end.toString(QtCore.Qt.ISODate), ) if search_filters.publication_date_start is not None: query.addQueryItem( "filter{date.gte}", search_filters.publication_date_start.toString( QtCore.Qt.ISODate), ) if search_filters.publication_date_end is not None: query.addQueryItem( "filter{date.lte}", search_filters.publication_date_end.toString( QtCore.Qt.ISODate), ) # TODO revisit once the support for spatial extent is available on # GeoNode API V2 if (search_filters.spatial_extent is not None and not search_filters.spatial_extent.isNull()): pass if search_filters.layer_types is None: types = [ models.GeonodeResourceType.VECTOR_LAYER, models.GeonodeResourceType.RASTER_LAYER, ] else: types = list(search_filters.layer_types) is_vector = models.GeonodeResourceType.VECTOR_LAYER in types is_raster = models.GeonodeResourceType.RASTER_LAYER in types if is_vector: query.addQueryItem("filter{subtype.in}", "vector") if is_raster: query.addQueryItem("filter{subtype.in}", "raster") if search_filters.ordering_field is not None: query.addQueryItem( "sort[]", f"{'-' if search_filters.reverse_ordering else ''}name") return query
def _build_search_query( self, search_params: models.GeonodeApiSearchFilters ) -> QtCore.QUrlQuery: query = QtCore.QUrlQuery() query.addQueryItem("page", str(search_params.page)) query.addQueryItem("page_size", str(search_params.page_size)) if search_params.title is not None: query.addQueryItem("filter{title.icontains}", search_params.title) if search_params.abstract is not None: query.addQueryItem("filter{abstract.icontains}", search_params.abstract) if search_params.selected_keyword is not None: query.addQueryItem( "filter{keywords.name.icontains}", search_params.selected_keyword ) if search_params.topic_category is not None: query.addQueryItem( "filter{category.identifier}", search_params.topic_category ) if search_params.temporal_extent_start is not None: query.addQueryItem( "filter{temporal_extent_start.gte}", search_params.temporal_extent_start.toString(QtCore.Qt.ISODate), ) if search_params.temporal_extent_end is not None: query.addQueryItem( "filter{temporal_extent_end.lte}", search_params.temporal_extent_end.toString(QtCore.Qt.ISODate), ) if search_params.publication_date_start is not None: query.addQueryItem( "filter{date.gte}", search_params.publication_date_start.toString(QtCore.Qt.ISODate), ) if search_params.publication_date_end is not None: query.addQueryItem( "filter{date.lte}", search_params.publication_date_end.toString(QtCore.Qt.ISODate), ) # TODO revisit once the support for spatial extent is available on # GeoNode API V2 if ( search_params.spatial_extent is not None and not search_params.spatial_extent.isNull() ): pass if search_params.layer_types is None: types = [ models.GeonodeResourceType.VECTOR_LAYER, models.GeonodeResourceType.RASTER_LAYER, models.GeonodeResourceType.MAP, ] else: types = list(search_params.layer_types) is_vector = models.GeonodeResourceType.VECTOR_LAYER in types is_raster = models.GeonodeResourceType.RASTER_LAYER in types is_map = models.GeonodeResourceType.MAP in types if is_vector and is_raster: pass elif is_vector: query.addQueryItem("filter{subtype}", "vector") elif is_raster: query.addQueryItem("filter{subtype}", "raster") else: raise NotImplementedError if search_params.ordering_field is not None: ordering_field_value = self.get_ordering_filter_name( search_params.ordering_field, reverse_sort=search_params.reverse_ordering, ) query.addQueryItem("sort[]", ordering_field_value) return query