<div dir="ltr">

<div dir="ltr" style="text-decoration-style:initial;text-decoration-color:initial"><span style="font-size:12.8px">Hi everyone,</span><br><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">This is the final report of my GSoC project. </div><div style="font-size:12.8px"> </div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px"><b><font size="4">Title:</font></b><br></div><blockquote style="font-size:12.8px;margin:0px 0px 0px 40px;border:none;padding:0px"><div>Database Output Storage for PyWPS</div><div><br></div></blockquote><div style="font-size:12.8px"><b><font size="4">Abstract:</font></b></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><span style="font-size:12.8px">PyWPS allows to publish and use processes (as defined by the OGC WPS standard). </span></div><div><span style="font-size:12.8px">Results can be either embedded in the XML response or, if they are more complex, they can be stored</span></div><div><span style="font-size:12.8px">as a file on a server. In such case, the response includes a URL link to the file. In this project,</span></div><div><span style="font-size:12.8px">an extension has been developed that adds another option. Output data can be stored in a database</span></div><div><span style="font-size:12.8px">(PostgreSQL aor SQLite) and the client is given a string that points to a particular database, schema</span></div><div><span style="font-size:12.8px">and table where the data is stored.</span></div></blockquote><div style="font-size:12.8px"><br></div><div style="font-size:12.8px"><br><b><font size="4">The state  of the art before GSoC:</font></b></div><blockquote style="font-size:12.8px;margin:0px 0px 0px 40px;border:none;padding:0px"><div>Output data could be either included in the response directly or it was stored <span style="font-size:12.8px">as a file on a server</span></div><div><span style="font-size:12.8px">and a link to the file was returned to the client. </span><span style="font-size:12.8px">Using the link, the client could download the file.</span></div></blockquote><div style="font-size:12.8px"><br><b><font size="4">The addition that my project brought to PyWPS:</font></b></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div style="font-size:12.8px">There is now another option for storing output data that uses databases.</div><div><div><span style="font-size:12.8px">Databases have several major advantages over the traditional system where data</span></div><div><span style="font-size:12.8px">is stored in files. Unlike the file management system, there can be more users</span></div><div><span style="font-size:12.8px">accessing the same data concurrently without corrupting the data. Indexing speeds</span></div><div><span style="font-size:12.8px">up the data retrieval operations. There is a standardized database language to use</span></div><div><span style="font-size:12.8px">for queries. There are mechanisms such as data normalization that can be used to</span></div><div><span style="font-size:12.8px">avoid duplicity of data and save storage space.</span></div></div></blockquote><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><br></blockquote><div style="font-size:12.8px"><b><font size="4">Future Work:</font></b></div><div><font><blockquote style="background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;margin:0px 0px 0px 40px;border:none;padding:0px"><div><span style="font-size:12.8px"> Currently, when using database output storage, the client is given a reference consisting of </span><br></div><div><span style="font-size:12.8px"> the name of the database, schema and table. However, the client needs to access the data themselves.<br></span></div></blockquote><blockquote style="background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;margin:0px 0px 0px 40px;border:none;padding:0px"><div><span style="font-size:12.8px"> One possible solution is to use MapServer or GeoServer and serve the client the data as a WMS, WFS or</span></div></blockquote><blockquote style="background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;margin:0px 0px 0px 40px;border:none;padding:0px"><div><span style="font-size:12.8px"> WCS services. I have started working on this but was not able to finish by the end of GSoC.</span></div></blockquote> <br></font></div><div style="font-size:12.8px"><b><font size="4"><br></font></b></div><div style="font-size:12.8px"><b><font size="4">Links:</font></b></div><div><br></div><div><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">Wiki: </span><br style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial"><font color="#1155cc"><u><a href="https://wiki.osgeo.org/wiki/Database_Output_Storage_for_PyWPS">https://wiki.osgeo.org/wiki/Database_Output_Storage_for_PyWPS</a></u></font><br style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial"><br><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">Link to pull request:</span><br style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial"><font color="#1155cc"><u><a href="https://github.com/geopython/pywps/pull/371">https://github.com/geopython/pywps/pull/371</a></u></font><br></div><div><br><span style="font-size:12.8px">Forked PyWPS repository:</span><br><font color="#1155cc"><span style="font-size:12.8px"><u><a href="https://github.com/janpisl/pywps">https://github.com/janpisl/pywps</a></u></span></font><br></div><div><br></div><div>

<span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">Link to a branch of the repository with all work related to database output storage:</span><br></div><div><font color="#1155cc"><span style="font-size:12.8px"><u><a href="https://github.com/janpisl/pywps/tree/db">https://github.com/janpisl/pywps/tree/db</a></u></span></font><br></div><div><font color="#1155cc"><span style="font-size:12.8px"><u><br></u></span></font></div><div>The following two charts show the state of the art before GSoC - output can be either included</div><div>in the XML response or stored as files on a server:</div><div><a href="https://wiki.osgeo.org/images/7/79/IncludedInResponse.png">https://wiki.osgeo.org/images/7/79/IncludedInResponse.png<br></a></div><div>

<u style="color:rgb(17,85,204);font-size:small;background-color:rgb(255,255,255)"><span style="font-size:12.8px"><a href="https://wiki.osgeo.org/images/0/01/Reference.png">https://wiki.osgeo.org/images/0/01/Reference.png</a></span></u>

<br></div><div><br></div><div>This chart shows the third option that my project adds to the existing two - storing output in a database:</div><div><font color="#1155cc"><u><span style="font-size:12.8px"><a href="https://wiki.osgeo.org/images/c/cf/DatabaseStorage.png">https://wiki.osgeo.org/images/c/cf/DatabaseStorage.png</a></span><br></u></font></div><div><font color="#1155cc"><u><span style="font-size:12.8px"><br></span></u></font></div><div><font color="#1155cc"><u><br></u></font></div></div></div>