Skip to content

Commit

Permalink
[server] Python plugins API cleanup part 1
Browse files Browse the repository at this point in the history
This is the first step to a cleaner and consitent API
for server plugin.

It also adds some new tests for the base request and
response classes
  • Loading branch information
elpaso committed May 3, 2017
1 parent fe7d49a commit b7d6c1e
Show file tree
Hide file tree
Showing 24 changed files with 610 additions and 90 deletions.
55 changes: 55 additions & 0 deletions python/server/qgsbufferserverrequest.sip
@@ -0,0 +1,55 @@
/************************************************************************
* This file has been generated automatically from *
* *
* ../src/server/qgsbufferserverrequest.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
************************************************************************/




class QgsBufferServerRequest : QgsServerRequest
{
%Docstring
QgsBufferServerRequest
Class defining request with data
%End

%TypeHeaderCode
#include "qgsbufferserverrequest.h"
%End
public:

QgsBufferServerRequest( const QString &url, Method method = GetMethod, QByteArray *data = 0 );
%Docstring
Constructor

\param url the url string
\param method the request method
%End

QgsBufferServerRequest( const QUrl &url, Method method = GetMethod, QByteArray *data = 0 );
%Docstring
Constructor

\param url QUrl
\param method the request method
%End

~QgsBufferServerRequest();

virtual QByteArray data() const;
%Docstring
:rtype: QByteArray
%End

};

/************************************************************************
* This file has been generated automatically from *
* *
* ../src/server/qgsbufferserverrequest.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
************************************************************************/
153 changes: 153 additions & 0 deletions python/server/qgsbufferserverresponse.sip
@@ -0,0 +1,153 @@
/************************************************************************
* This file has been generated automatically from *
* *
* ../src/server/qgsbufferserverresponse.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
************************************************************************/




class QgsBufferServerResponse: QgsServerResponse
{
%Docstring
Class defining buffered response
%End

%TypeHeaderCode
#include "qgsbufferserverresponse.h"
%End
public:

QgsBufferServerResponse();
~QgsBufferServerResponse();


virtual void setHeader( const QString &key, const QString &value );

%Docstring
Set Header entry
Add Header entry to the response
Note that it is usually an error to set Header after data have been sent through the wire
%End

virtual void removeHeader( const QString &key );

%Docstring
Clear header
Undo a previous 'setHeader' call
%End

virtual QString header( const QString &key ) const;

%Docstring
Return the header value
:rtype: str
%End

virtual QMap<QString, QString> headers() const;
%Docstring
Return all the headers
:rtype: QMap<str, QString>
%End

virtual bool headersSent() const;

%Docstring
Return true if the headers have alredy been sent
:rtype: bool
%End

virtual void setStatusCode( int code );

%Docstring
Set the http status code
\param code HTTP status code value
%End

virtual int statusCode( ) const;
%Docstring
Return the http status code
:rtype: int
%End

virtual void sendError( int code, const QString &message );

%Docstring
Send error
This method delegates error handling at the server level. This is different
from calling setReturnCode() which let you return a specific response body.
Calling sendError() will end the transaction and any attempt to write data
or set headers will be an error.
\param code HHTP return code value
\param message An informative error message
%End

virtual QIODevice *io();

%Docstring
Return the underlying QIODevice
:rtype: QIODevice
%End

virtual void finish();

%Docstring
Finish the response, ending the transaction
%End

virtual void flush();

%Docstring
Flushes the current output buffer to the network

'flush()' may be called multiple times. For HTTP transactions
headers will be written on the first call to 'flush()'.
%End

virtual void clear();

%Docstring
Reset all headers and content for this response
%End

virtual QByteArray data() const;

%Docstring
Get the data written so far

This is implementation dependent: some implementations may not
give access to the underlying and return an empty array.

Note that each call to 'flush' may empty the buffer and in case
of streaming process you may get partial content
:rtype: QByteArray
%End

virtual void truncate();

%Docstring
Truncate data

Clear internal buffer
%End

QByteArray body() const;
%Docstring
Return body
:rtype: QByteArray
%End


private:
QgsBufferServerResponse(const QgsBufferServerResponse &) ;
};

/************************************************************************
* This file has been generated automatically from *
* *
* ../src/server/qgsbufferserverresponse.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
************************************************************************/
32 changes: 22 additions & 10 deletions python/server/qgsrequesthandler.sip
Expand Up @@ -29,20 +29,29 @@ class QgsRequestHandler /Abstract/
/** Allow plugins to return a QgsServerException*/
void setServiceException( const QgsServerException &ex );

/** Set an HTTP header*/
void setHeader( const QString &name, const QString &value );
//! Set an HTTP response header
void setResponseHeader( const QString &name, const QString &value );

//! Retrieve header value
QString header( const QString &name ) const;
//! Remove an HTTP response header
void removeResponseHeader( const QString &name );

//! Return the list of all header keys
QList<QString> headerKeys() const;
//! Retrieve response header value
QString responseHeader( const QString &name ) const;

/** Remove an HTTP header*/
void removeHeader( const QString &name );
//! Return the response headers
QMap<QString, QString> responseHeaders() const;

/** Delete all HTTP headers*/
void clear();
//! Set an HTTP request header
void setRequestHeader( const QString &name, const QString &value );

//! Remove an HTTP request header
void removeRequestHeader( const QString &name );

//! Retrieve request header value
QString requestHeader( const QString &name ) const;

//! Return the Request headers
QMap<QString, QString> requestHeaders() const;

/** Append the bytestream to response body*/
void appendBody( const QByteArray &body );
Expand All @@ -62,6 +71,9 @@ class QgsRequestHandler /Abstract/
/** Clear response buffer */
void clearBody();

//! Clears the response body and headers
void clear();

/** Return body data */
QByteArray body() const;

Expand Down
49 changes: 43 additions & 6 deletions python/server/qgsserverrequest.sip
Expand Up @@ -30,6 +30,9 @@ class QgsServerRequest
%End
public:

typedef QMap<QString, QString> Parameters;
typedef QMap<QString, QString> Headers;

enum Method
{
HeadMethod, PutMethod, GetMethod, PostMethod, DeleteMethod
Expand All @@ -48,21 +51,55 @@ class QgsServerRequest
*/
QgsServerRequest( const QString &url, Method method );


/**
* Constructor
*
* @param url QUrl
* @param method the request method (default to GetMethod)
* \param url the url string
* \param method the request method
* \param headers
*/
QgsServerRequest( const QUrl &url, Method method = GetMethod );
QgsServerRequest( const QString &url, Method method = GetMethod, const QgsServerRequest::Headers &headers = QgsServerRequest::Headers( ) );

/**
* Constructor
*
* \param url QUrl
* \param method the request method
* \param headers
*/
QgsServerRequest( const QUrl &url, Method method = GetMethod, const QgsServerRequest::Headers &headers = QgsServerRequest::Headers( ) );


//! destructor
virtual ~QgsServerRequest();


/**
* Return the header value
* @param name of the header
* @return the header value or an empty string
*/
QString header( const QString &name ) const;

/**
* Set an header
* @param name
* @param value
*/
void setHeader( const QString &name, const QString &value );

/**
* Return the header map
* @return the headers map
*/
QMap<QString, QString> headers( ) const;

/**
* @return the value of the header field for that request
* Remove an header
* @param name
*/
virtual QString getHeader( const QString &name ) const;
void removeHeader( const QString &name );

/**
* @return the request url
Expand All @@ -87,7 +124,7 @@ class QgsServerRequest
/**
* Get a parameter value
*/
QString getParameter( const QString &key ) const;
QString parameter( const QString& key ) const;

/**
* Remove a parameter
Expand Down
7 changes: 3 additions & 4 deletions python/server/qgsserverresponse.sip
Expand Up @@ -44,19 +44,18 @@ class QgsServerResponse

/**
* Clear header
* Undo a previous 'set_header' call
*/
virtual void clearHeader( const QString &key ) = 0;
virtual void removeHeader( const QString &key ) = 0;

/**
* Return the header value
*/
virtual QString header( const QString &key ) const = 0;

/**
* Return the list of all header keys
* Return the response headers
*/
virtual QList<QString> headerKeys() const = 0;
virtual QMap<QString, QString> headers() const = 0;

/**
* Return true if the headers have alredy been sent
Expand Down
2 changes: 2 additions & 0 deletions python/server/server.sip
Expand Up @@ -30,6 +30,8 @@

%Include qgsserverrequest.sip
%Include qgsserverresponse.sip
%Include qgsbufferserverresponse.sip
%Include qgsbufferserverrequest.sip
%Include qgsserverexception.sip
%Include qgsservice.sip
%Include qgsservicemodule.sip
Expand Down

0 comments on commit b7d6c1e

Please sign in to comment.