def run(self): """Run the query. @raise OverpassBadRequestException,NetWorkErrorException, OverpassTimeoutException @return: The result of the query. @rtype: str """ loop = QEventLoop() downloader = QgsFileDownloader( self._url, self.result_path, delayStart=True) downloader.downloadExited.connect(loop.quit) downloader.downloadError.connect(self.error) downloader.downloadCanceled.connect(self.canceled) downloader.downloadCompleted.connect(self.completed) downloader.startDownload() loop.exec_() file_obj = codecs.open(self.result_path, 'r', 'utf-8') file_obj.seek(0, 2) fsize = file_obj.tell() file_obj.seek(max(fsize - 1024, 0), 0) lines = file_obj.readlines() file_obj.close() lines = lines[-10:] # Get last 10 lines timeout = '<remark> runtime error: Query timed out in "[a-z]+" ' \ 'at line [\d]+ after ([\d]+) seconds. </remark>' if re.search(timeout, ''.join(lines)): raise OverpassTimeoutException else: return self.result_path
def query(self, query): """Perform a nominatim query. :param query: Query to execute on the nominatim server. :type query: basestring :return: The result of the query as a dictionary. :rtype: dict :raise NetWorkErrorException """ url_query = QUrl(self.__url) query_string = QUrlQuery() query_string.addQueryItem('q', query) query_string.addQueryItem('format', 'json') query_string.addQueryItem('info', 'QgisQuickOSMPlugin') url_query.setQuery(query_string) loop = QEventLoop() downloader = QgsFileDownloader(url_query, self.result_path, delayStart=True) downloader.downloadExited.connect(loop.quit) downloader.downloadError.connect(self.error) downloader.downloadCanceled.connect(self.canceled) downloader.downloadCompleted.connect(self.completed) downloader.startDownload() loop.exec_() with open(self.result_path) as json_file: data = json.load(json_file) return data
def run(self): """Run the query. @raise OverpassBadRequestException,NetWorkErrorException, OverpassTimeoutException @return: The result of the query. @rtype: str """ loop = QEventLoop() downloader = QgsFileDownloader(self._url, self.result_path, delayStart=True) downloader.downloadExited.connect(loop.quit) downloader.downloadError.connect(self.error) downloader.downloadCanceled.connect(self.canceled) downloader.downloadCompleted.connect(self.completed) downloader.startDownload() loop.exec_() file_obj = codecs.open(self.result_path, 'r', 'utf-8') file_obj.seek(0, 2) fsize = file_obj.tell() file_obj.seek(max(fsize - 1024, 0), 0) lines = file_obj.readlines() file_obj.close() lines = lines[-10:] # Get last 10 lines timeout = '<remark> runtime error: Query timed out in "[a-z]+" ' \ 'at line [\d]+ after ([\d]+) seconds. </remark>' if re.search(timeout, ''.join(lines)): raise OverpassTimeoutException else: return self.result_path
def read_from_http(uri: str, cache_folder: Path): """Read a QGIS project stored into on a remote web server accessible through HTTP. :param uri: web URL to the QGIS project :type uri: str :return: a tuple with XML document and the filepath. :rtype: Tuple[QtXml.QDomDocument, str] """ # get filename from URL parts parsed = urlparse(uri) if not parsed.path.rpartition("/")[2].endswith((".qgs", ".qgz")): raise ValueError( "URI doesn't ends with QGIS project extension (.qgs or .qgz): {}". format(uri)) cached_filepath = cache_folder / parsed.path.rpartition("/")[2] # download it loop = QEventLoop() project_download = QgsFileDownloader(url=QUrl(uri), outputFileName=str(cached_filepath), delayStart=True) project_download.downloadExited.connect(loop.quit) project_download.startDownload() loop.exec_() return read_from_file(str(cached_filepath))
def download(self): """Download the data""" loop = QEventLoop() downloader = QgsFileDownloader( self._url, self.result_path, delayStart=True) downloader.downloadExited.connect(loop.quit) downloader.downloadError.connect(self.error) downloader.downloadCanceled.connect(self.canceled) downloader.downloadCompleted.connect(self.completed) downloader.startDownload() loop.exec_()
def run(self): # Run file download in separate event loop loop = QEventLoop() downloader = QgsFileDownloader(self.url, self.filePath, delayStart=True) downloader.downloadExited.connect(loop.quit) downloader.downloadError.connect(self.error) downloader.downloadCanceled.connect(self.canceled) downloader.downloadCompleted.connect(self.completed) downloader.startDownload() loop.exec_()
def gbif_GET(url, args, **kwargs): handle, output_path = mkstemp() QgsMessageLog.logMessage('gbif_GET outfile: %s' % output_path, 'SpeciesExplorer', 0) QgsMessageLog.logMessage('gbif_GET URL: %s' % url, 'SpeciesExplorer', 0) loop = QEventLoop() downloader = QgsFileDownloader(QUrl(url), output_path, delayStart=True) downloader.downloadExited.connect(loop.quit) downloader.startDownload() loop.exec_() file = open(output_path, 'rt', encoding='utf-8') data = file.read() file.close() return json.loads(data, encoding='utf-8')
def run(self): """Run the query. @raise OverpassBadRequestException,NetWorkErrorException, OverpassTimeoutException @return: The result of the query. @rtype: str """ loop = QEventLoop() downloader = QgsFileDownloader(self._url, self.result_path, delayStart=True) downloader.downloadExited.connect(loop.quit) downloader.downloadError.connect(self.error) downloader.downloadCanceled.connect(self.canceled) downloader.downloadCompleted.connect(self.completed) downloader.startDownload() loop.exec_() osm_file = QFileInfo(self.result_path) if not osm_file.exists() and not osm_file.isFile(): raise OverpassTimeoutException # The download is done, checking for not complete OSM file. # Overpass might aborted the request with HTTP 200. file_obj = codecs.open(self.result_path, 'r', 'utf-8') file_obj.seek(0, 2) fsize = file_obj.tell() file_obj.seek(max(fsize - 1024, 0), 0) lines = file_obj.readlines() file_obj.close() lines = lines[-10:] # Get last 10 lines timeout = ( '<remark> runtime error: Query timed out in "[a-z]+" at line ' '[\d]+ after ([\d]+) seconds. </remark>') if re.search(timeout, ''.join(lines)): raise OverpassTimeoutException # Everything went fine return self.result_path
def run(self): """Run the query. @raise OverpassBadRequestException,NetWorkErrorException, OverpassTimeoutException @return: The result of the query. @rtype: str """ loop = QEventLoop() downloader = QgsFileDownloader(self._url, self.result_path, delayStart=True) downloader.downloadExited.connect(loop.quit) downloader.downloadError.connect(self.error) downloader.downloadCanceled.connect(self.canceled) downloader.downloadCompleted.connect(self.completed) downloader.startDownload() loop.exec_() for message in self.errors: self.is_query_timed_out(message) self.is_bad_request(message) LOGGER.error(message) if len(self.errors): raise NetWorkErrorException('Overpass API', ', '.join(self.errors)) osm_file = QFileInfo(self.result_path) if not osm_file.exists() and not osm_file.isFile(): # Do not raise a QuickOSM exception here # It must be a bug from QuickOSM raise FileNotFoundError self.check_file(self.result_path) # Everything went fine return self.result_path