More Python exception bubbling and SIP enum fix

This commit is contained in:
Alessandro Pasotti 2019-08-19 20:50:01 +02:00
parent 4cc7a0ffa6
commit dab7481083
5 changed files with 40 additions and 8 deletions

View File

@ -80,7 +80,7 @@ QgsServerOgcApi constructor
~QgsServerOgcApi(); ~QgsServerOgcApi();
virtual void executeRequest( const QgsServerApiContext &context ) const throw( QgsServerApiBadRequestException ) /VirtualErrorHandler=serverapi_badrequest_exception_handler/; virtual void executeRequest( const QgsServerApiContext &context ) const;
%Docstring %Docstring
Executes a request by passing the given ``context`` to the API handlers. Executes a request by passing the given ``context`` to the API handlers.
%End %End

View File

@ -101,14 +101,15 @@ Returns the default response content type in case the client did not specificall
ask for any particular content type. ask for any particular content type.
%End %End
virtual QList<QgsServerOgcApi::ContentType> contentTypes() const;
virtual QList<int> contentTypesInt() const /PyName=contentTypes/;
%Docstring %Docstring
Returns the list of content types this handler can serve, default to JSON and HTML. Returns the list of content types this handler can serve, default to JSON and HTML.
In case a specialized type (such as GEOJSON) is supported, In case a specialized type (such as GEOJSON) is supported,
the generic type (such as JSON) should not be listed. the generic type (such as JSON) should not be listed.
%End %End
virtual void handleRequest( const QgsServerApiContext &context ) const = 0; virtual void handleRequest( const QgsServerApiContext &context ) const throw( QgsServerApiBadRequestException ) /VirtualErrorHandler=serverapi_badrequest_exception_handler/;
%Docstring %Docstring
Handles the request within its ``context`` Handles the request within its ``context``
@ -149,7 +150,7 @@ returns an empty string if there are not matches.
void write( QVariant &data, const QgsServerApiContext &context, const QVariantMap &htmlMetadata = QVariantMap() ) const; void write( QVariant &data, const QgsServerApiContext &context, const QVariantMap &htmlMetadata = QVariantMap() ) const throw( QgsServerApiBadRequestException );
%Docstring %Docstring
Writes ``data`` to the ``context`` response stream, content-type is calculated from the ``context`` request, Writes ``data`` to the ``context`` response stream, content-type is calculated from the ``context`` request,
optional ``htmlMetadata`` for the HTML templates can be specified and will be added as "metadata" to optional ``htmlMetadata`` for the HTML templates can be specified and will be added as "metadata" to

View File

@ -101,7 +101,7 @@ class SERVER_EXPORT QgsServerOgcApi : public QgsServerApi
/** /**
* Executes a request by passing the given \a context to the API handlers. * Executes a request by passing the given \a context to the API handlers.
*/ */
virtual void executeRequest( const QgsServerApiContext &context ) const override SIP_THROW( QgsServerApiBadRequestException ) SIP_VIRTUALERRORHANDLER( serverapi_badrequest_exception_handler ); virtual void executeRequest( const QgsServerApiContext &context ) const override;
/** /**
* Returns a map of contentType => mime type * Returns a map of contentType => mime type

View File

@ -66,6 +66,29 @@ QgsServerOgcApiHandler::~QgsServerOgcApiHandler()
//qDebug() << "handler destroyed"; //qDebug() << "handler destroyed";
} }
QList<QgsServerOgcApi::ContentType> QgsServerOgcApiHandler::contentTypes() const
{
return { QgsServerOgcApi::ContentType::JSON, QgsServerOgcApi::ContentType::HTML };
}
void QgsServerOgcApiHandler::handleRequest( const QgsServerApiContext &context ) const
{
Q_UNUSED( context );
throw QgsServerApiNotImplementedException( QStringLiteral( "Subclasses must implement handleRequest" ) );
}
QList<int> QgsServerOgcApiHandler::contentTypesInt() const
{
QList<int> ret;
const QList<QgsServerOgcApi::ContentType> constCt { contentTypes() };
for ( const QgsServerOgcApi::ContentType &t : constCt )
{
ret.push_back( static_cast<int>( t ) );
}
return ret;
}
QString QgsServerOgcApiHandler::contentTypeForAccept( const QString &accept ) const QString QgsServerOgcApiHandler::contentTypeForAccept( const QString &accept ) const
{ {

View File

@ -115,8 +115,16 @@ class SERVER_EXPORT QgsServerOgcApiHandler
* Returns the list of content types this handler can serve, default to JSON and HTML. * Returns the list of content types this handler can serve, default to JSON and HTML.
* In case a specialized type (such as GEOJSON) is supported, * In case a specialized type (such as GEOJSON) is supported,
* the generic type (such as JSON) should not be listed. * the generic type (such as JSON) should not be listed.
* \note not available in Python bindings
*/ */
virtual QList<QgsServerOgcApi::ContentType> contentTypes() const { return { QgsServerOgcApi::ContentType::JSON, QgsServerOgcApi::ContentType::HTML }; } virtual QList<QgsServerOgcApi::ContentType> contentTypes() const SIP_SKIP;
/**
* Returns the list of content types this handler can serve, default to JSON and HTML.
* In case a specialized type (such as GEOJSON) is supported,
* the generic type (such as JSON) should not be listed.
*/
virtual QList<int> contentTypesInt() const SIP_PYNAME( contentTypes );
/** /**
* Handles the request within its \a context * Handles the request within its \a context
@ -126,7 +134,7 @@ class SERVER_EXPORT QgsServerOgcApiHandler
* *
* \throws QgsServerApiBadRequestError if the method encounters any error * \throws QgsServerApiBadRequestError if the method encounters any error
*/ */
virtual void handleRequest( const QgsServerApiContext &context ) const = 0; virtual void handleRequest( const QgsServerApiContext &context ) const SIP_THROW( QgsServerApiBadRequestException ) SIP_VIRTUALERRORHANDLER( serverapi_badrequest_exception_handler );
/** /**
* Analyzes the incoming request \a context and returns the validated * Analyzes the incoming request \a context and returns the validated
@ -266,7 +274,7 @@ class SERVER_EXPORT QgsServerOgcApiHandler
* - content_type_name( content_type ): returns a short name from a content type for example "text/html" will return "HTML" * - content_type_name( content_type ): returns a short name from a content type for example "text/html" will return "HTML"
* *
*/ */
void write( QVariant &data, const QgsServerApiContext &context, const QVariantMap &htmlMetadata = QVariantMap() ) const; void write( QVariant &data, const QgsServerApiContext &context, const QVariantMap &htmlMetadata = QVariantMap() ) const SIP_THROW( QgsServerApiBadRequestException );
/** /**
* Returns an URL to self, to be used for links to the current resources and as a base for constructing links to sub-resources * Returns an URL to self, to be used for links to the current resources and as a base for constructing links to sub-resources