From a2f9868f6fd77eecf6fbcf41f8e6dbc96355f228 Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Thu, 27 Feb 2025 10:15:45 +1000 Subject: [PATCH] Remove duplicate http method enums --- python/PyQt6/core/auto_additions/qgis.py | 15 +++++++++++ python/PyQt6/core/auto_generated/qgis.sip.in | 5 +++- python/core/auto_additions/qgis.py | 15 +++++++++++ python/core/auto_generated/qgis.sip.in | 5 +++- .../processing/qgsalgorithmhttprequest.cpp | 5 ++++ .../network/qgsblockingnetworkrequest.cpp | 26 +++++++++---------- src/core/network/qgsblockingnetworkrequest.h | 13 ++-------- src/core/network/qgsfiledownloader.cpp | 8 ++++++ src/core/qgis.h | 5 +++- src/providers/wfs/qgswfsdatasourceuri.cpp | 18 ++++++++----- src/providers/wfs/qgswfsdatasourceuri.h | 9 +------ .../wfs/qgswfstransactionrequest.cpp | 2 +- 12 files changed, 84 insertions(+), 42 deletions(-) diff --git a/python/PyQt6/core/auto_additions/qgis.py b/python/PyQt6/core/auto_additions/qgis.py index b075418ec36..ca8157e349e 100644 --- a/python/PyQt6/core/auto_additions/qgis.py +++ b/python/PyQt6/core/auto_additions/qgis.py @@ -1889,12 +1889,27 @@ Qgis.BrowserDirectoryMonitoring.baseClass = Qgis # monkey patching scoped based enum Qgis.HttpMethod.Get.__doc__ = "GET method" Qgis.HttpMethod.Post.__doc__ = "POST method" +Qgis.HttpMethod.Head.__doc__ = "HEAD method. \n.. versionadded:: 3.44" +Qgis.HttpMethod.Put.__doc__ = "PUT method. \n.. versionadded:: 3.44" +Qgis.HttpMethod.Delete.__doc__ = "DELETE method. \n.. versionadded:: 3.44" Qgis.HttpMethod.__doc__ = """Different methods of HTTP requests .. versionadded:: 3.22 * ``Get``: GET method * ``Post``: POST method +* ``Head``: HEAD method. + + .. versionadded:: 3.44 + +* ``Put``: PUT method. + + .. versionadded:: 3.44 + +* ``Delete``: DELETE method. + + .. versionadded:: 3.44 + """ # -- diff --git a/python/PyQt6/core/auto_generated/qgis.sip.in b/python/PyQt6/core/auto_generated/qgis.sip.in index 14bdc74a622..f017d032e70 100644 --- a/python/PyQt6/core/auto_generated/qgis.sip.in +++ b/python/PyQt6/core/auto_generated/qgis.sip.in @@ -615,7 +615,10 @@ The development version enum class HttpMethod /BaseType=IntEnum/ { Get, - Post + Post, + Head, + Put, + Delete, }; enum class VectorExportResult /BaseType=IntEnum/ diff --git a/python/core/auto_additions/qgis.py b/python/core/auto_additions/qgis.py index b9ba7190835..60822516bd3 100644 --- a/python/core/auto_additions/qgis.py +++ b/python/core/auto_additions/qgis.py @@ -1865,12 +1865,27 @@ Qgis.BrowserDirectoryMonitoring.baseClass = Qgis # monkey patching scoped based enum Qgis.HttpMethod.Get.__doc__ = "GET method" Qgis.HttpMethod.Post.__doc__ = "POST method" +Qgis.HttpMethod.Head.__doc__ = "HEAD method. \n.. versionadded:: 3.44" +Qgis.HttpMethod.Put.__doc__ = "PUT method. \n.. versionadded:: 3.44" +Qgis.HttpMethod.Delete.__doc__ = "DELETE method. \n.. versionadded:: 3.44" Qgis.HttpMethod.__doc__ = """Different methods of HTTP requests .. versionadded:: 3.22 * ``Get``: GET method * ``Post``: POST method +* ``Head``: HEAD method. + + .. versionadded:: 3.44 + +* ``Put``: PUT method. + + .. versionadded:: 3.44 + +* ``Delete``: DELETE method. + + .. versionadded:: 3.44 + """ # -- diff --git a/python/core/auto_generated/qgis.sip.in b/python/core/auto_generated/qgis.sip.in index 9360b0fb39c..1a3f0c9c7a8 100644 --- a/python/core/auto_generated/qgis.sip.in +++ b/python/core/auto_generated/qgis.sip.in @@ -615,7 +615,10 @@ The development version enum class HttpMethod { Get, - Post + Post, + Head, + Put, + Delete, }; enum class VectorExportResult diff --git a/src/analysis/processing/qgsalgorithmhttprequest.cpp b/src/analysis/processing/qgsalgorithmhttprequest.cpp index c0004c8b21f..b1149d56a44 100644 --- a/src/analysis/processing/qgsalgorithmhttprequest.cpp +++ b/src/analysis/processing/qgsalgorithmhttprequest.cpp @@ -148,6 +148,11 @@ QVariantMap QgsHttpRequestAlgorithm::processAlgorithm( const QVariantMap ¶me errorCode = blockingRequest.post( request, data.toUtf8() ); break; } + + case Qgis::HttpMethod::Head: + case Qgis::HttpMethod::Put: + case Qgis::HttpMethod::Delete: + throw QgsProcessingException( QObject::tr( "Unsupported HTTP method: %1" ).arg( qgsEnumValueToKey( httpMethod ) ) ); } // Handle reply diff --git a/src/core/network/qgsblockingnetworkrequest.cpp b/src/core/network/qgsblockingnetworkrequest.cpp index cee9476c69e..b91a4d369b1 100644 --- a/src/core/network/qgsblockingnetworkrequest.cpp +++ b/src/core/network/qgsblockingnetworkrequest.cpp @@ -59,7 +59,7 @@ void QgsBlockingNetworkRequest::setAuthCfg( const QString &authCfg ) QgsBlockingNetworkRequest::ErrorCode QgsBlockingNetworkRequest::get( QNetworkRequest &request, bool forceRefresh, QgsFeedback *feedback, RequestFlags requestFlags ) { - return doRequest( Get, request, forceRefresh, feedback, requestFlags ); + return doRequest( Qgis::HttpMethod::Get, request, forceRefresh, feedback, requestFlags ); } QgsBlockingNetworkRequest::ErrorCode QgsBlockingNetworkRequest::post( QNetworkRequest &request, const QByteArray &data, bool forceRefresh, QgsFeedback *feedback ) @@ -73,12 +73,12 @@ QgsBlockingNetworkRequest::ErrorCode QgsBlockingNetworkRequest::post( QNetworkRe QgsBlockingNetworkRequest::ErrorCode QgsBlockingNetworkRequest::post( QNetworkRequest &request, QIODevice *data, bool forceRefresh, QgsFeedback *feedback ) { mPayloadData = data; - return doRequest( Post, request, forceRefresh, feedback ); + return doRequest( Qgis::HttpMethod::Post, request, forceRefresh, feedback ); } QgsBlockingNetworkRequest::ErrorCode QgsBlockingNetworkRequest::head( QNetworkRequest &request, bool forceRefresh, QgsFeedback *feedback ) { - return doRequest( Head, request, forceRefresh, feedback ); + return doRequest( Qgis::HttpMethod::Head, request, forceRefresh, feedback ); } QgsBlockingNetworkRequest::ErrorCode QgsBlockingNetworkRequest::put( QNetworkRequest &request, const QByteArray &data, QgsFeedback *feedback ) @@ -92,41 +92,41 @@ QgsBlockingNetworkRequest::ErrorCode QgsBlockingNetworkRequest::put( QNetworkReq QgsBlockingNetworkRequest::ErrorCode QgsBlockingNetworkRequest::put( QNetworkRequest &request, QIODevice *data, QgsFeedback *feedback ) { mPayloadData = data; - return doRequest( Put, request, true, feedback ); + return doRequest( Qgis::HttpMethod::Put, request, true, feedback ); } QgsBlockingNetworkRequest::ErrorCode QgsBlockingNetworkRequest::deleteResource( QNetworkRequest &request, QgsFeedback *feedback ) { - return doRequest( Delete, request, true, feedback ); + return doRequest( Qgis::HttpMethod::Delete, request, true, feedback ); } void QgsBlockingNetworkRequest::sendRequestToNetworkAccessManager( const QNetworkRequest &request ) { switch ( mMethod ) { - case Get: + case Qgis::HttpMethod::Get: mReply = QgsNetworkAccessManager::instance()->get( request ); break; - case Post: + case Qgis::HttpMethod::Post: mReply = QgsNetworkAccessManager::instance()->post( request, mPayloadData ); break; - case Head: + case Qgis::HttpMethod::Head: mReply = QgsNetworkAccessManager::instance()->head( request ); break; - case Put: + case Qgis::HttpMethod::Put: mReply = QgsNetworkAccessManager::instance()->put( request, mPayloadData ); break; - case Delete: + case Qgis::HttpMethod::Delete: mReply = QgsNetworkAccessManager::instance()->deleteResource( request ); break; }; } -QgsBlockingNetworkRequest::ErrorCode QgsBlockingNetworkRequest::doRequest( QgsBlockingNetworkRequest::Method method, QNetworkRequest &request, bool forceRefresh, QgsFeedback *feedback, RequestFlags requestFlags ) +QgsBlockingNetworkRequest::ErrorCode QgsBlockingNetworkRequest::doRequest( Qgis::HttpMethod method, QNetworkRequest &request, bool forceRefresh, QgsFeedback *feedback, RequestFlags requestFlags ) { mMethod = method; mFeedback = feedback; @@ -329,7 +329,7 @@ void QgsBlockingNetworkRequest::replyProgress( qint64 bytesReceived, qint64 byte } } - if ( mMethod == Put || mMethod == Post ) + if ( mMethod == Qgis::HttpMethod::Put || mMethod == Qgis::HttpMethod::Post ) emit uploadProgress( bytesReceived, bytesTotal ); else emit downloadProgress( bytesReceived, bytesTotal ); @@ -451,7 +451,7 @@ void QgsBlockingNetworkRequest::replyFinished() mReplyContent = QgsNetworkReplyContent( mReply ); const QByteArray content = mReply->readAll(); - if ( !( mRequestFlags & RequestFlag::EmptyResponseIsValid ) && content.isEmpty() && !mGotNonEmptyResponse && mMethod == Get ) + if ( !( mRequestFlags & RequestFlag::EmptyResponseIsValid ) && content.isEmpty() && !mGotNonEmptyResponse && mMethod == Qgis::HttpMethod::Get ) { mErrorMessage = tr( "empty response: %1" ).arg( mReply->errorString() ); mErrorCode = ServerExceptionError; diff --git a/src/core/network/qgsblockingnetworkrequest.h b/src/core/network/qgsblockingnetworkrequest.h index e334224e7f3..efd55274aa0 100644 --- a/src/core/network/qgsblockingnetworkrequest.h +++ b/src/core/network/qgsblockingnetworkrequest.h @@ -257,19 +257,10 @@ class CORE_EXPORT QgsBlockingNetworkRequest : public QObject private : - enum Method - { - Get, - Post, - Head, - Put, - Delete - }; - //! The reply to the request QNetworkReply *mReply = nullptr; - Method mMethod = Get; + Qgis::HttpMethod mMethod = Qgis::HttpMethod::Get; //! payload data used in PUT/POST request QIODevice *mPayloadData; @@ -304,7 +295,7 @@ class CORE_EXPORT QgsBlockingNetworkRequest : public QObject QPointer< QgsFeedback > mFeedback; - ErrorCode doRequest( Method method, QNetworkRequest &request, bool forceRefresh, QgsFeedback *feedback = nullptr, RequestFlags requestFlags = RequestFlags() ); + ErrorCode doRequest( Qgis::HttpMethod method, QNetworkRequest &request, bool forceRefresh, QgsFeedback *feedback = nullptr, RequestFlags requestFlags = RequestFlags() ); QString errorMessageFailedAuth(); diff --git a/src/core/network/qgsfiledownloader.cpp b/src/core/network/qgsfiledownloader.cpp index 2968a43ac04..519d1f69b49 100644 --- a/src/core/network/qgsfiledownloader.cpp +++ b/src/core/network/qgsfiledownloader.cpp @@ -20,6 +20,7 @@ #include "qgsapplication.h" #include "qgsauthmanager.h" #include "qgsvariantutils.h" +#include "qgslogger.h" #include #include @@ -84,6 +85,13 @@ void QgsFileDownloader::startDownload() mReply = nam->post( request, mData ); break; } + + case Qgis::HttpMethod::Head: + case Qgis::HttpMethod::Put: + case Qgis::HttpMethod::Delete: + QgsDebugError( QStringLiteral( "Unsupported HTTP method: %1" ).arg( qgsEnumValueToKey( mHttpMethod ) ) ); + // not supported + break; } if ( !mAuthCfg.isEmpty() ) diff --git a/src/core/qgis.h b/src/core/qgis.h index 9a6a8d4162f..f0f9923fc46 100644 --- a/src/core/qgis.h +++ b/src/core/qgis.h @@ -1000,7 +1000,10 @@ class CORE_EXPORT Qgis enum class HttpMethod : int { Get = 0, //!< GET method - Post = 1 //!< POST method + Post = 1, //!< POST method + Head, //!< HEAD method. \since QGIS 3.44 + Put, //!< PUT method. \since QGIS 3.44 + Delete, //!< DELETE method. \since QGIS 3.44 }; Q_ENUM( HttpMethod ) diff --git a/src/providers/wfs/qgswfsdatasourceuri.cpp b/src/providers/wfs/qgswfsdatasourceuri.cpp index 51e085ac08f..4a7d0187806 100644 --- a/src/providers/wfs/qgswfsdatasourceuri.cpp +++ b/src/providers/wfs/qgswfsdatasourceuri.cpp @@ -17,7 +17,6 @@ #include "qgswfsconstants.h" #include "qgswfsdatasourceuri.h" -#include "qgsmessagelog.h" #include @@ -242,18 +241,18 @@ QUrl QgsWFSDataSourceURI::baseURL( bool bIncludeServiceWFS ) const return url; } -QUrl QgsWFSDataSourceURI::requestUrl( const QString &request, const Method &method ) const +QUrl QgsWFSDataSourceURI::requestUrl( const QString &request, Qgis::HttpMethod method ) const { QUrl url; QUrlQuery urlQuery; switch ( method ) { - case Post: + case Qgis::HttpMethod::Post: url = QUrl( mPostEndpoints.contains( request ) ? mPostEndpoints[request] : mURI.param( QgsWFSConstants::URI_PARAM_URL ) ); urlQuery = QUrlQuery( url ); break; - default: - case Get: + + case Qgis::HttpMethod::Get: { const auto defaultUrl( QUrl( mURI.param( QgsWFSConstants::URI_PARAM_URL ) ) ); if ( mGetEndpoints.contains( request ) ) @@ -288,9 +287,16 @@ QUrl QgsWFSDataSourceURI::requestUrl( const QString &request, const Method &meth } break; } + + case Qgis::HttpMethod::Head: + case Qgis::HttpMethod::Put: + case Qgis::HttpMethod::Delete: + // not supported, impossible to reach + break; } + urlQuery.addQueryItem( QStringLiteral( "SERVICE" ), QStringLiteral( "WFS" ) ); - if ( method == Method::Get && !request.isEmpty() ) + if ( method == Qgis::HttpMethod::Get && !request.isEmpty() ) urlQuery.addQueryItem( QStringLiteral( "REQUEST" ), request ); url.setQuery( urlQuery ); return url; diff --git a/src/providers/wfs/qgswfsdatasourceuri.h b/src/providers/wfs/qgswfsdatasourceuri.h index 2f86443f4a0..ee7fbeee930 100644 --- a/src/providers/wfs/qgswfsdatasourceuri.h +++ b/src/providers/wfs/qgswfsdatasourceuri.h @@ -32,13 +32,6 @@ class QgsWFSDataSourceURI { public: - //! Http method for DCP URIs - enum Method - { - Get, - Post - }; - explicit QgsWFSDataSourceURI( const QString &uri ); //! Copy constructor @@ -54,7 +47,7 @@ class QgsWFSDataSourceURI QUrl baseURL( bool bIncludeServiceWFS = true ) const; //! Returns request URL (with SERVICE=WFS parameter) - QUrl requestUrl( const QString &request, const Method &method = Method::Get ) const; + QUrl requestUrl( const QString &request, Qgis::HttpMethod method = Qgis::HttpMethod::Get ) const; //! Gets WFS version. Can be auto, 1.0.0, 1.1.0 or 2.0.0. QString version() const; diff --git a/src/providers/wfs/qgswfstransactionrequest.cpp b/src/providers/wfs/qgswfstransactionrequest.cpp index 7a6275e39c2..cceee20bf09 100644 --- a/src/providers/wfs/qgswfstransactionrequest.cpp +++ b/src/providers/wfs/qgswfstransactionrequest.cpp @@ -24,7 +24,7 @@ QgsWFSTransactionRequest::QgsWFSTransactionRequest( const QgsWFSDataSourceURI &u bool QgsWFSTransactionRequest::send( const QDomDocument &doc, QDomDocument &serverResponse ) { - const QUrl url( mUri.requestUrl( QStringLiteral( "Transaction" ), QgsWFSDataSourceURI::Method::Post ) ); + const QUrl url( mUri.requestUrl( QStringLiteral( "Transaction" ), Qgis::HttpMethod::Post ) ); QgsDebugMsgLevel( doc.toString(), 4 );