Compare commits

..

No commits in common. "9bd9a9ca56990fae6ea5f58b5c6326a7bab0e52c" and "26ed1e0e0d797298dd6e0613b5ea920c9c01bf8d" have entirely different histories.

10 changed files with 57 additions and 58 deletions

View File

@ -19,16 +19,16 @@ deprecated=False
experimental=True
plugin_dependencies=
qgisMinimumVersion=3.30
qgisMaximumVersion=4.99
qgisMaximumVersion=3.99
supportsQt6=True
# versioning
version=0.1.1
version=0.1.0
changelog=
[service]
domain_name=https://geonature.cenra-outils.org/geonature
domain_name=https://geonature.cen-isere.fr/geonature
biodiv_aura=https://donnees.biodiversite-auvergne-rhone-alpes.fr
[ref_taxon]

7
gn_tools/plugin_main.py Normal file → Executable file
View File

@ -24,7 +24,7 @@ from qgis.PyQt.QtCore import QCoreApplication, QLocale, QTranslator, QUrl
from qgis.PyQt.QtGui import QDesktopServices, QIcon
from qgis.PyQt.QtWidgets import QAction, QMessageBox
from qgis.PyQt.QtNetwork import QNetworkAccessManager
from qgis.PyQt.QtWidgets import QCheckBox, QApplication
from PyQt5.QtWidgets import QCheckBox, QApplication
# project
from gn_tools.__about__ import (
@ -388,13 +388,12 @@ class GnToolsPlugin:
self.dlg.show()
# Run the dialog event loop
result = self.dlg.exec()
result = self.dlg.exec_()
if result:
# Do something useful here - delete the line containing pass and
# substitute with you
print('ok')
print(result)
self.dlg.activateWindow()
pass
@ -470,7 +469,7 @@ class GnToolsPlugin:
def activate_window(self):
# Put the dialog on top once the rectangle is drawn
self.dlg.activateWindow()
# self.activateWindow()
self.canvas.unsetMapTool(self.move_tool)
self.check_valid()

View File

@ -1,9 +1,9 @@
# Import PyQt libs
from qgis.PyQt.QtCore import (
from PyQt5.QtCore import (
pyqtSignal,
Qt,
)
from qgis.PyQt.QtGui import QColor
from PyQt5.QtGui import QColor
# Import PyQgis libs
from qgis.core import (
QgsRectangle,
@ -42,7 +42,7 @@ class RectangleFeatureTool(QgsMapTool):
# Mouse button pressed.
def canvasPressEvent(self, event: QgsMapMouseEvent):
if event.button() == Qt.MouseButton(0x00000001):
if event.button() == Qt.LeftButton:
self.start_point = self.toMapCoordinates(event.pos())
self.end_point = self.start_point
self.is_left_button_pressed = True
@ -58,7 +58,7 @@ class RectangleFeatureTool(QgsMapTool):
# The mouse button is released.
def canvasReleaseEvent(self, event: QgsMapMouseEvent):
# if the left mouse button was released
if event.button() == Qt.MouseButton(0x00000001):
if event.button() == Qt.LeftButton:
if event.type() == 3:
# get the rectangle created from the click point and
# left mouse button release points

View File

@ -77,15 +77,15 @@ class GetFilterFromAPI(QDialog):
self._pending_downloads -= 1
# If reply is an error or reply is a redirection, login is not accepted
print(reply.attribute(
QNetworkRequest.Attribute(0)
QNetworkRequest.HttpStatusCodeAttribute
))
print(reply.error(),' : ',reply.dtype)
self.network_manager.cookieStatus = reply.attribute(
QNetworkRequest.Attribute(0)
QNetworkRequest.HttpStatusCodeAttribute
)
QApplication.restoreOverrideCursor()
if (
reply.error() != QNetworkReply.NetworkError(0)
reply.error() != QNetworkReply.NoError
or self.network_manager.cookieStatus != 200
):
# Error code 299 means the logins are invalid
@ -126,7 +126,7 @@ class GetFilterFromAPI(QDialog):
def get_jdd(self):
self._pending_downloads += 1
QApplication.setOverrideCursor(Qt.CursorShape(3))
QApplication.setOverrideCursor(Qt.WaitCursor)
self.dlg.jdd_box.setEnabled(True)
url_api = self.domain_url + 'api/meta/datasets?'
@ -142,7 +142,7 @@ class GetFilterFromAPI(QDialog):
def get_phylog(self):
self._pending_downloads += 2
QApplication.setOverrideCursor(Qt.CursorShape(3))
QApplication.setOverrideCursor(Qt.WaitCursor)
self.dlg.regne.setEnabled(True)
if self.parent.src_name == 'GéoNature':
@ -154,7 +154,7 @@ class GetFilterFromAPI(QDialog):
def get_taxon_tree(self):
QApplication.setOverrideCursor(Qt.CursorShape(3))
QApplication.setOverrideCursor(Qt.WaitCursor)
if self.parent.src_name == 'GéoNature':
url_api = self.tax_url + 'api/synthese/taxons_tree'
@ -170,8 +170,8 @@ class GetFilterFromAPI(QDialog):
def send_request(self,url,type_request,type_param):
print(url)
request = QNetworkRequest(url)
request.setHeader(QNetworkRequest.KnownHeaders(0), "application/json")
request.setHeader(QNetworkRequest.KnownHeaders(4), self.cookie)
request.setHeader(QNetworkRequest.ContentTypeHeader, "application/json")
request.setHeader(QNetworkRequest.CookieHeader, self.cookie)
if type_request == 'GET':
reply = self.network_manager.get(request)
elif type_request == 'POST':

View File

@ -2,10 +2,10 @@
import json
import time
# Import PyQt libs
from qgis.PyQt.QtCore import QObject, pyqtSignal, QUrl, Qt, QVariant
from qgis.PyQt.QtGui import QColor
from qgis.PyQt.QtNetwork import QNetworkRequest, QNetworkReply
from qgis.PyQt.QtWidgets import QDialog, QPushButton, QApplication, QVBoxLayout, QHBoxLayout, QButtonGroup, QCheckBox, QLabel
from PyQt5.QtCore import QObject, pyqtSignal, QUrl, Qt, QVariant
from PyQt5.QtGui import QColor
from PyQt5.QtNetwork import QNetworkRequest, QNetworkReply
from PyQt5.QtWidgets import QDialog, QPushButton, QApplication, QVBoxLayout, QHBoxLayout, QButtonGroup, QCheckBox, QLabel
# Import PyQgis libs
from qgis.utils import iface
from qgis.core import QgsProject, QgsFeature, QgsDataSourceUri, QgsRectangle, QgsNetworkAccessManager, QgsVectorLayer, QgsPointXY, QgsWkbTypes, QgsMapLayerProxyModel, QgsGeometry, QgsCoordinateReferenceSystem, QgsCoordinateTransform, QgsField
@ -60,7 +60,7 @@ class GetTaxrefId(QObject):
url = "https://api.checklistbank.org/nameusage/search?content=SCIENTIFIC_NAME&datasetKey=2008&facet=datasetKey&facet=rank&facet=issue&facet=status&facet=nomStatus&facet=nameType&facet=field&facet=authorship&facet=authorshipYear&facet=extinct&facet=environment&facet=origin&limit=50&offset=0&q={nom}&rank={rank}&type=PREFIX".format(nom=nom.split("(")[0], rank=rank.lower())
print(url)
request = QNetworkRequest(QUrl(url))
request.setHeader(QNetworkRequest.KnownHeaders(0), "application/json")
request.setHeader(QNetworkRequest.ContentTypeHeader, "application/json")
reply = self.network_manager.get(request)
reply.finished.connect(lambda: self.handle_finished(reply, feature_id))
self._iterate_names += 1
@ -68,7 +68,7 @@ class GetTaxrefId(QObject):
def handle_finished(self, reply, feature_id):
self._pending_downloads -= 1
if reply.error() != QNetworkReply.NetworkError(0):
if reply.error() != QNetworkReply.NoError:
print(f"code: {reply.error()} message: {reply.errorString()}")
if reply.error() == 403:
print("Service down")
@ -146,14 +146,14 @@ class ImportDataGbif(QObject):
self.nb_request = 1
print(url)
request = QNetworkRequest(url)
request.setHeader(QNetworkRequest.KnownHeaders(0), "application/json")
request.setHeader(QNetworkRequest.ContentTypeHeader, "application/json")
reply = self.network_manager.get(request)
reply.finished.connect(lambda: self.handle_finished(reply))
self._pending_downloads += 1
def handle_finished(self, reply):
self._pending_downloads -= 1
if reply.error() != QNetworkReply.NetworkError(0):
if reply.error() != QNetworkReply.NoError:
print(f"code: {reply.error()} message: {reply.errorString()}")
if reply.error() == 403:
print("Service down")

View File

@ -8,8 +8,8 @@ from qgis.PyQt.QtCore import QByteArray, QJsonDocument, QObject, QUrl, pyqtSigna
from qgis.PyQt.QtNetwork import QNetworkReply, QNetworkRequest
from qgis.PyQt.QtWidgets import QAction, QMessageBox, QDialog
from qgis.PyQt.QtCore import Qt
from qgis.PyQt.QtWidgets import QApplication
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication
# from PyQt6.QtCore import Qt
# from PyQt6.QtWidgets import QApplication
@ -42,7 +42,7 @@ class GetLogin(QDialog):
# self.total_zh = 0
# PyQt5 - Version
QApplication.setOverrideCursor(Qt.CursorShape(3))
QApplication.setOverrideCursor(Qt.WaitCursor)
# PyQt6 - Version
# QApplication.setOverrideCursor(Qt.CursorShape.WaitCursor)
self._pending_downloads = 0
@ -57,14 +57,14 @@ class GetLogin(QDialog):
QApplication.restoreOverrideCursor()
# If reply is an error or reply is a redirection, login is not accepted
print(reply.attribute(
QNetworkRequest.Attribute(0)
QNetworkRequest.HttpStatusCodeAttribute
))
print('Login : ',reply.error())
self.network_manager.cookieStatus = reply.attribute(
QNetworkRequest.Attribute(0)
QNetworkRequest.HttpStatusCodeAttribute
)
if (
reply.error() != QNetworkReply.NetworkError(0)
reply.error() != QNetworkReply.NoError
or self.network_manager.cookieStatus != 200
):
# Error code 299 means the logins are invalid
@ -98,7 +98,7 @@ class GetLogin(QDialog):
else:
self.cookies = self.network_manager.cookieJar()
self.is_connect.setText("Good Job !")
QApplication.setOverrideCursor(Qt.CursorShape(0))
# If the authenfication configuration already exists,
# modify it with the new values
# self.manager_config.setConfigMap(
@ -156,7 +156,7 @@ class GetLogin(QDialog):
}
print(url)
request = QNetworkRequest(url)
request.setHeader(QNetworkRequest.KnownHeaders(0), "application/json")
request.setHeader(QNetworkRequest.ContentTypeHeader, "application/json")
document = QJsonDocument(data_json)
print(document.toJson())
reply = self.network_manager.post(request, document.toJson())

View File

@ -15,7 +15,7 @@ from qgis.PyQt.QtCore import (
pyqtSignal,
QJsonDocument,
Qt,
# QTextCodec
QTextCodec
)
from qgis.PyQt.QtNetwork import QNetworkReply, QNetworkRequest
from qgis.PyQt.QtWidgets import (
@ -294,7 +294,7 @@ class PivotStatus(QDialog):
self.cd_nom = cd_nom
self.url_api = self.domain_url + __api_cd_sta__
# QApplication.setOverrideCursor(Qt.CursorShape(3))
# QApplication.setOverrideCursor(Qt.WaitCursor)
self.multi_dep = True
self.cookie = (self.network_manager.cookieJar()
@ -325,17 +325,17 @@ class PivotStatus(QDialog):
+ ','.join(map(str,cd_nom))
)
request = QNetworkRequest(url)
request.setHeader(QNetworkRequest.KnownHeaders(0), "application/json")
request.setHeader(QNetworkRequest.KnownHeaders(4), self.cookie)
request.setHeader(QNetworkRequest.ContentTypeHeader, "application/json")
request.setHeader(QNetworkRequest.CookieHeader, self.cookie)
reply = self.network_manager.get(request)
reply.finished.connect(lambda: self.import_finished(reply))
def import_finished(self, reply):
self._pending_downloads -= 1
print(reply.attribute(QNetworkRequest.Attribute(0)))
print(reply.attribute(QNetworkRequest.HttpStatusCodeAttribute))
if reply.attribute(QNetworkRequest.Attribute(0)) != 200:
if reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) != 200:
print(f"code: {reply.error()} message: {reply.errorString()}")
else:
data_request = reply.readAll().data().decode()
@ -449,9 +449,9 @@ class PivotStatus(QDialog):
layername = data['layer_name']
fcString = json.dumps(data)
# codec = QTextCodec.codecForName("UTF-8")
fields = QgsJsonUtils.stringToFields(fcString)
feats = QgsJsonUtils.stringToFeatureList(fcString, fields)
codec = QTextCodec.codecForName("UTF-8")
fields = QgsJsonUtils.stringToFields(fcString, codec)
feats = QgsJsonUtils.stringToFeatureList(fcString, fields, codec)
vl = QgsVectorLayer(geom_type, layername, "memory")
if vl.sourceCrs() != self.layer_crs:

View File

@ -17,7 +17,7 @@ from qgis.PyQt.QtCore import (
QObject,
QUrl,
pyqtSignal,
# QTextCodec,
QTextCodec,
Qt
)
from qgis.PyQt.QtNetwork import QNetworkReply, QNetworkRequest
@ -68,8 +68,7 @@ class ParamWidget(QDialog):
self.print_change
)
else :
QApplication.setOverrideCursor(Qt.CursorShape(3))
print(network_manager.cookieJar().cookiesForUrl(QUrl(self.domain_url)))
QApplication.setOverrideCursor(Qt.WaitCursor)
self.cookie = (network_manager.cookieJar()
.cookiesForUrl(QUrl(self.domain_url))[0]
)
@ -105,9 +104,9 @@ class ParamWidget(QDialog):
def import_finished(self, reply):
self._pending_downloads -= 1
QApplication.restoreOverrideCursor()
print(reply.attribute(QNetworkRequest.Attribute(0)))
print(reply.attribute(QNetworkRequest.HttpStatusCodeAttribute))
if reply.attribute(QNetworkRequest.Attribute(0)) != 200:
if reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) != 200:
print(f"code: {reply.error()} message: {reply.errorString()}")
else:
self.lst_exp = ['Synthèse taxons']
@ -147,8 +146,8 @@ class ParamWidget(QDialog):
# Define request properties (cookie, header)
request = QNetworkRequest(url)
request.setHeader(QNetworkRequest.KnownHeaders(0), "application/json")
request.setHeader(QNetworkRequest.KnownHeaders(4), self.cookie)
request.setHeader(QNetworkRequest.ContentTypeHeader, "application/json")
request.setHeader(QNetworkRequest.CookieHeader, self.cookie)
if apiFilter:
doc = QJsonDocument(self.json_filter)
@ -195,7 +194,7 @@ class LoadingImport(QDialog):
# self.json_filter = {}
# self.total_zh = 0
QApplication.setOverrideCursor(Qt.CursorShape(3))
QApplication.setOverrideCursor(Qt.WaitCursor)
self._pending_downloads = 0
self.run()
@ -284,10 +283,10 @@ class LoadingImport(QDialog):
# Define request properties (cookie, header)
request = QNetworkRequest(url)
request.setHeader(QNetworkRequest.KnownHeaders(0), "application/json")
request.setHeader(QNetworkRequest.ContentTypeHeader, "application/json")
if self.cookie:
request.setHeader(QNetworkRequest.KnownHeaders(4), self.cookie)
request.setHeader(QNetworkRequest.CookieHeader, self.cookie)
if 'Synthèse taxons' in self.source :
reply = self.network_manager.post(request,doc.toJson())
@ -298,9 +297,9 @@ class LoadingImport(QDialog):
def loading_finished(self,reply):
self._pending_downloads -= 1
print(reply.attribute(QNetworkRequest.Attribute(0)))
print(reply.attribute(QNetworkRequest.HttpStatusCodeAttribute))
if reply.attribute(QNetworkRequest.Attribute(0)) != 200:
if reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) != 200:
print(f"code: {reply.error()} message: {reply.errorString()}")
else:
data_request = reply.readAll().data().decode()
@ -400,8 +399,9 @@ class LoadingImport(QDialog):
fcString = json.dumps(data)
fields = QgsJsonUtils.stringToFields(fcString)
feats = QgsJsonUtils.stringToFeatureList(fcString, fields)
codec = QTextCodec.codecForName("UTF-8")
fields = QgsJsonUtils.stringToFields(fcString, codec)
feats = QgsJsonUtils.stringToFeatureList(fcString, fields, codec)
if self.api:
crs_api = QgsCoordinateReferenceSystem(self.api['geometry_srid'])

0
gn_tools/toolbelt/log_handler.py Normal file → Executable file
View File

0
gn_tools/toolbelt/preferences.py Normal file → Executable file
View File