<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.osgeo.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Wiki-Janpisl</id>
	<title>OSGeo - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.osgeo.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Wiki-Janpisl"/>
	<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/wiki/Special:Contributions/Wiki-Janpisl"/>
	<updated>2026-04-12T09:34:30Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.9</generator>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=File:Reference.png&amp;diff=116147</id>
		<title>File:Reference.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=File:Reference.png&amp;diff=116147"/>
		<updated>2018-08-13T17:40:48Z</updated>

		<summary type="html">&lt;p&gt;Wiki-Janpisl: The other option available - the output is stored as a file and the client is given a URL reference.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The other option available - the output is stored as a file and the client is given a URL reference.&lt;/div&gt;</summary>
		<author><name>Wiki-Janpisl</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=File:IncludedInResponse.png&amp;diff=116146</id>
		<title>File:IncludedInResponse.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=File:IncludedInResponse.png&amp;diff=116146"/>
		<updated>2018-08-13T17:39:19Z</updated>

		<summary type="html">&lt;p&gt;Wiki-Janpisl: The first option - output is included in the response.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The first option - output is included in the response.&lt;/div&gt;</summary>
		<author><name>Wiki-Janpisl</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=File:DatabaseStorage.png&amp;diff=116145</id>
		<title>File:DatabaseStorage.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=File:DatabaseStorage.png&amp;diff=116145"/>
		<updated>2018-08-13T17:36:59Z</updated>

		<summary type="html">&lt;p&gt;Wiki-Janpisl: This image shows the option I added for storing output data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This image shows the option I added for storing output data&lt;/div&gt;</summary>
		<author><name>Wiki-Janpisl</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Database_Output_Storage_for_PyWPS&amp;diff=116144</id>
		<title>Database Output Storage for PyWPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Database_Output_Storage_for_PyWPS&amp;diff=116144"/>
		<updated>2018-08-13T17:33:25Z</updated>

		<summary type="html">&lt;p&gt;Wiki-Janpisl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
My name is Jan Pisl and I study at the Czech Technical University in Prague. I will be participating in this year's GSoC. My project’s aim is to develop database storage support for PyWPS that would allow output data to be stored in a database in a way that is compliant with the OGC WPS Standard. I will be using Python 3.6. &lt;br /&gt;
&lt;br /&gt;
== Project ==&lt;br /&gt;
Title: Database Output Storage for PyWPS&lt;br /&gt;
&lt;br /&gt;
Student: Jan Pišl&lt;br /&gt;
&lt;br /&gt;
Mentors: [[User:Jachym|Jáchym Čepický]], [[User:Martinl|Martin Landa]].&lt;br /&gt;
&lt;br /&gt;
Project's repositories: [https://github.com/janpisl/pywps GitHub repository], [https://summerofcode.withgoogle.com/projects/#5084513521106944 Project's page on GSoC website] &lt;br /&gt;
&lt;br /&gt;
== Technology ==&lt;br /&gt;
&lt;br /&gt;
=== PyWPS ===&lt;br /&gt;
PyWPS is a server side implementation of the OGC Web Processing Service (OGC&lt;br /&gt;
WPS) standards 1.0.0. It is written in the Python programming language, it runs&lt;br /&gt;
on Python 2.7, 3.3 or higher and it is tested and developed on Linux. It uses&lt;br /&gt;
a ConfigParser format for configuration files. It supports a variety of geospatial&lt;br /&gt;
software and tools such as GRASS GIS, R Project or the GDAL library. Synchronous&lt;br /&gt;
and asynchronuous invocations are supported. As for request encoding, two options&lt;br /&gt;
are available - key-value pairs (using HTTP-GET) or XML payload (using HTTPPOST).&lt;br /&gt;
Every process that is to be deployed on the server is defined as a class&lt;br /&gt;
and has several mandatory parameters. The key parameter called &amp;quot;handler&amp;quot; gets&lt;br /&gt;
invoked every time there is an incoming request, it accepts the request and returns&lt;br /&gt;
a response.&lt;br /&gt;
&lt;br /&gt;
In 2016, it upgraded from PyWPS 3 to PyWPS 4. Some of the more significant&lt;br /&gt;
changes include every input being considered a list of inputs and all inputs having&lt;br /&gt;
file, data and stream attributes. These attributes allow better manipulation&lt;br /&gt;
with data.&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&lt;br /&gt;
Python is a high-level programming language that fully supports object-oriented and&lt;br /&gt;
structured programming. Developed in the late 1980s, the first version 0.9.0 was&lt;br /&gt;
released in 1991. In 2008, Python 3.0 was released. Currently, the most up-to-date&lt;br /&gt;
version available is 3.6.&lt;br /&gt;
It was designed as a syntactically simple language, using whitespace intendantion&lt;br /&gt;
instead of brackets and English words rather than punctuation. It is a dynamicallytyped&lt;br /&gt;
language, which means it is not neccessary to specify a data-type when defining&lt;br /&gt;
a variable. For its simplicity and readability, Python is often considered a good&lt;br /&gt;
first programming language to learn.&lt;br /&gt;
One of the key advantages of Python is its high extensibility. It provides large&lt;br /&gt;
standard libraries and also an extensive number of other modules, packages and&lt;br /&gt;
libraries, so most of the common programming tasks are already solved, scripted&lt;br /&gt;
and made available.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Dates !! Task !! Deliverables&lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period (April, 23 - May, 14) ||&lt;br /&gt;
Initial research on GDAL, MapServer, SQLAlchemy, GeoAlchemy, relational databases (PostgreSQL, Oracle, Microsoft SQL Server, MySQL, SQLite,...) &lt;br /&gt;
&lt;br /&gt;
Select which databases will be supported in this project.&lt;br /&gt;
&lt;br /&gt;
Set up environment for work - virtual environment with a distribution of Linux, instances of selected database management systems for testing. &lt;br /&gt;
| [https://docs.google.com/document/d/1DzdT0bcAmeU4EsoZlg8jBZmcfx6mIPe4Z8PRwsWzP_U/edit#heading=h.9dmblslll4ai Bonding Period Report]&lt;br /&gt;
|-&lt;br /&gt;
| Week 1 (May, 14 - May, 20) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Define “DbStorage”, an abstract base class that will ensure derived classes implement particular methods from this class. Define abstract methods that are necessary for writing output data to a remote database.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 2 (May, 21 - May, 27) ||&lt;br /&gt;
&lt;br /&gt;
Write test script that checks “PgStorage” will work correctly and write output vector data to a PostgreSQL database.&lt;br /&gt;
&lt;br /&gt;
Develop “PgStorage“ class that inherits from “DbStorage” and implements proposed functionality.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 3 (May, 28 - June, 3) ||&lt;br /&gt;
&lt;br /&gt;
Write a test (or update test written in the previous week) to ensure correct functionality of newly developed classes.&lt;br /&gt;
&lt;br /&gt;
Develop several classes based on selection in week 1 – e.g. “MSSQLStorage”, “OCIStorage”, “MySQLStorage”, etc.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 4 (June, 4 - June, 10) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Develop a mechanism for handling raster output data and implement it in the above-mentioned classes. If GDAL does not support writing raster data to a specific database by default, appropriate tool or library must be identified. For example, for writing raster data into PostgreSQL, ”raster2pgsql“ tool can be used.&lt;br /&gt;
&lt;br /&gt;
Decide how other types of data (such as string, table, CSV, etc.) will be handled and implement it.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 5 (June, 11 - June, 15) Phase 1 Evaluation||&lt;br /&gt;
&lt;br /&gt;
Write a test that checks all data types will get correctly stored in database.&lt;br /&gt;
&lt;br /&gt;
Write and submit weekly report.&lt;br /&gt;
&lt;br /&gt;
Write and submit Phase 1 evaluation.&lt;br /&gt;
&lt;br /&gt;
'''Deliverables for Phase 1:''' Correctly functioning and tested module that enables output data (vector, raster or other) to be stored in one of several database management systems.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 6 (June, 16 - June, 24) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Handle metadata. Currently, logs with information about run processes (such as when a process started and finished) are stored in a SQLite database. Implement a functionality that accesses logs, extracts desired metadata from them and saves them in the same database as output data. Use unique identifier of every process to join metadata (using primary key) with the corresponding output data (foreign key). For each run process, include expiration date to its output data.&lt;br /&gt;
&lt;br /&gt;
Develop a trigger that removes output data when it expires.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 7 (June, 25 - July, 1) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Establish a connection between database and MapServer and allow MapServer to access output data stored in database.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 8 (July, 2 - July, 8) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable output data to be viewed as WMS services through MapServer.&lt;br /&gt;
&lt;br /&gt;
Edit current code so the reference embodied in the responding document is a URL link to a running MapServer service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 9 (July, 9 - July, 13) Phase 2 Evaluation||&lt;br /&gt;
&lt;br /&gt;
Write and submit Phase 2 evaluation.&lt;br /&gt;
&lt;br /&gt;
'''Deliverables for Phase 2''': Correctly functioning and tested module that enables output data to be viewed as a Web Map Service using MapServer.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 10 (July, 14 - July, 22) ||&lt;br /&gt;
&lt;br /&gt;
Update previously developed test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable raster output data to be accessed and/or edited as OGC Web Coverage Service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 11 (July, 23 - July, 29) ||&lt;br /&gt;
&lt;br /&gt;
Update previously developed test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable vector output data to be accessed and/or edited as OGC Web Feature Service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 12 (July, 30 - August, 5) ||&lt;br /&gt;
&lt;br /&gt;
Write a test that ensures newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Develop a demo that demonstrates implemented functionality.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 13 (August, 6 - August, 14)&lt;br /&gt;
&lt;br /&gt;
||Create documentation that can be added to the current PyWPS documentation.&lt;br /&gt;
&lt;br /&gt;
Finalize work, clean code and prepare a pull request(s) to PyWPS GitHub repository.&lt;br /&gt;
&lt;br /&gt;
Write and submit final report.&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Reports ==&lt;br /&gt;
=== Bonding Period ===&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/document/d/1DzdT0bcAmeU4EsoZlg8jBZmcfx6mIPe4Z8PRwsWzP_U/edit#heading=h.9dmblslll4ai Bonding Period Report]&lt;br /&gt;
&lt;br /&gt;
=== Week 1===&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
I defined the first version of “DbStorage”, a class that will allow output data to be stored in one of RDBMSs supported (PostGIS, MS Server, Oracle spatial, SpatiaLite) [1]&lt;br /&gt;
I downloaded PostgreSQL and PostGIS and run it locally on my computer. I tested it functions correctly by using code I had written previously to GSoC [2] that stores output data in PostGIS. I run some of PyWPS test processes and checked output data does get stored in PostGIS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
Implement PGStorage, a class within the DbStorage class that will store output data to PostGIS and returns database name, schema and table as a reference to the client. &lt;br /&gt;
Start working on implementing MSServerStorage, OciStorage and SpatiaLiteStorage.&lt;br /&gt;
Download, run and test SpatiaLite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/45b98e04c428c2e62643a42bbebfedf8efc0603e&lt;br /&gt;
&lt;br /&gt;
[2] https://github.com/ctu-geoforall-lab-projects/bp-pisl-2018-pywps/commit/c364be4888d74b2285e5a348afc6c3fe184fbc64&lt;br /&gt;
&lt;br /&gt;
=== Week 2===&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
Develop and implement PGStorage, a class within the DbStorage class that will store output data to PostGIS and returns database name, schema and table as a reference to the client.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Study materials on Factory design pattern [2] recommended by my mentor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Download, run and test SpatiaLite. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
Develop, implement and test _MSSQLStorage and _OciStorage _MySQLStorage classes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
I have some questions related to work I will be doing next week. I will consult with my mentor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/254b1e5697c0b4781544a6329b52eb4688e60a22&lt;br /&gt;
&lt;br /&gt;
[2]  http://python-3-patterns-idioms-test.readthedocs.io/en/latest/Factory.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Week 3 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Following my mentor's advice, I made a decision that _MSSQLStorage,  _OciStorage _MySQLStorage classes will not be implemented at this stage. There will only be PgStorage and SQLiteStorage that store data in a PostgreSQL and SQLite databases, respectively &lt;br /&gt;
&lt;br /&gt;
- Define DbStorageAbstract, an abstract class from which PgStorage and SQLiteStorage will inherit [1]&lt;br /&gt;
&lt;br /&gt;
- Develop and implement SQLiteStorage [2] &lt;br /&gt;
&lt;br /&gt;
- Fix/Update DbStorage class [3] &lt;br /&gt;
&lt;br /&gt;
- Update outputs.py so complex output data is either stored as files or in a database depending on configuration [4]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Develop a mechanism for handling raster output data and implement it.&lt;br /&gt;
&lt;br /&gt;
- Decide how other types of data (such as string, table, CSV, etc.) will be handled and implement it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
There is an error occuring when I run PyWPS and I haven't been able to find out what is causing it. I will discuss this with my mentor on a call on Monday morning.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/89ab12a2fd883a0df6c070a4ca573f89b6c31a5a&lt;br /&gt;
&lt;br /&gt;
[2]  https://github.com/janpisl/pywps/commit/864d275fe8c47e41c07f8278b8037e80a0b0b838&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/commit/c0d698cefde9a5085cd7d76bb0e32156a6391880 &lt;br /&gt;
&lt;br /&gt;
[4] https://github.com/janpisl/pywps/commit/7f00fa06ac5fd7823d79a363f6163dcc38e7bbb0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Week 4 === &lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
-I changed the structure of the code. Classes PgStorage and SQLiteStorage are now stored in separate files in the db folder. FileStorage is in a separate file, too. Rest of the code is in the __init__ files. [1]&lt;br /&gt;
&lt;br /&gt;
- I added the data_type attribute to inout/formats/__init__.py. At the moment, allowed values are either vector or raster using the enum module. This was done so when storing output data it can be differed between raster and vector data and appropriate method can be used. [2]&lt;br /&gt;
&lt;br /&gt;
- The Dbstorage class has been simplified. Instead of creating an instance of the class in outputs.py and calling the get_db_type method in the constructor, get_db_type is now a static method and gets called directly in outputs.py [3]&lt;br /&gt;
&lt;br /&gt;
- PgStorage accesses the data_type value and calls appropriate method (store_vector_output or store_raster_output) [4]&lt;br /&gt;
&lt;br /&gt;
- I implemented the store_raster_output method in the PgStorage class [5]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Implement store_raster_output for SQLiteStorage&lt;br /&gt;
&lt;br /&gt;
- Implement another method for storing other types of data (string, CSV, etc.)&lt;br /&gt;
&lt;br /&gt;
- Write a script that tests whether different data types get stored correctly&lt;br /&gt;
&lt;br /&gt;
- Submit the Phase 1 evaluation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/18c46864ff75fb01e3c7d76f3f4a1b6d2457a22f[[2]  https://github.com/janpisl/pywps/commit/4bb079bfcde0b4fcc42393f531e86c47a91507d4&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/commit/80c61c92e183c06af741fe94d0b172f9a5940609&lt;br /&gt;
&lt;br /&gt;
[4] https://github.com/janpisl/pywps/commit/e024b1e5d1eb8df1a79989a59b14276b2757d98d&lt;br /&gt;
&lt;br /&gt;
[5] https://github.com/janpisl/pywps/commit/a09dfc61729b36eb81ddd0d9adb5bda2effe3029&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Week 5=== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
- I updated the store_vector_output method in the SQLite class [1]&lt;br /&gt;
&lt;br /&gt;
- I implemented a method for storing raster outputs in SQLite [2]&lt;br /&gt;
&lt;br /&gt;
- I implemented a method for storing output data of other datatypes in PostgreSQL [3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Write test_storage, a unit test that would test all storage options and their correct functionality&lt;br /&gt;
&lt;br /&gt;
- Handle metadata&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/44e9130c8bbb73841c51a09266a9db62ff2809f9&lt;br /&gt;
&lt;br /&gt;
[2]  https://github.com/janpisl/pywps/commit/5bf8eb883343f0caacd47470bf79152ac751d480&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/commit/50cd11ffa2486ee3de7cac3340874179d81d4e2e&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Week 6 === &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
''' &lt;br /&gt;
&lt;br /&gt;
- Database schema gets created automatically when the DbStorage class is initialized. [1]&lt;br /&gt;
&lt;br /&gt;
- I developed &amp;quot;test_storage&amp;quot; module for testing storing output data [2]&lt;br /&gt;
&lt;br /&gt;
- I implemented unittest classes for testing file storage [3], PostgreSQL storage [4] [5] [6] and SQLite [7] [8]&lt;br /&gt;
&lt;br /&gt;
- Some other minor changes and updates to the code and fixing bugs [9]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Address issues revealed by testing&lt;br /&gt;
&lt;br /&gt;
- Handle metadata&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/524d65f2cb5cdfe5f0bbdf769a9850c32886952e&lt;br /&gt;
&lt;br /&gt;
[2]  https://github.com/janpisl/pywps/commit/1c36dd1ee3b1c61d819b92f5a195792f488b1193&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/commit/2896d7670ed2f38470eab54790ed2e822c42583d&lt;br /&gt;
&lt;br /&gt;
[4] https://github.com/janpisl/pywps/commit/97c8255a9ea3ad52a022d84315eb4e725afe4fc6&lt;br /&gt;
&lt;br /&gt;
[5] https://github.com/janpisl/pywps/commit/16afbea95f1fea31dd3ac9e7a30d63b5d309ad12&lt;br /&gt;
&lt;br /&gt;
[6] https://github.com/janpisl/pywps/commit/b08dee2644888379d08c25919d112b0e29f2423d&lt;br /&gt;
&lt;br /&gt;
[7] https://github.com/janpisl/pywps/commit/c406e21d8ee844e468fe672d236285664a8fde76&lt;br /&gt;
&lt;br /&gt;
[8] https://github.com/janpisl/pywps/commit/a1493e70024d06b3d29d1522edca64af4574de0b&lt;br /&gt;
&lt;br /&gt;
[9] https://github.com/janpisl/pywps/commits/master&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Week 8=== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
- PgStorage and SQLiteStorage classes inherit from DbStorage [1]&lt;br /&gt;
&lt;br /&gt;
- The &amp;quot;store&amp;quot; method is now implemented in the parent class DbStorage&lt;br /&gt;
&lt;br /&gt;
- Method for storing vector outputs is now implemented in the parent class DbStorage [2]&lt;br /&gt;
&lt;br /&gt;
- Method for storing outputs such as CSV, plain text, etc. is now implemented in the parent class DbStorage [3]&lt;br /&gt;
&lt;br /&gt;
- Each class inheriting from DbStorage now implements a method for initializating database (create schema, etc.) [4]&lt;br /&gt;
&lt;br /&gt;
- Fixing bugs and some other minor changes and updates to the code [5]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Download, compile and run MapServer&lt;br /&gt;
&lt;br /&gt;
- Establish a connection between MapServer and PostgreSQL&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/889ce577747815554970c3c39cebed15fe1d1ca6&lt;br /&gt;
&lt;br /&gt;
[2] https://github.com/janpisl/pywps/commit/68d193aed029e4c6c4d6e8ec73ac44de8c183b71&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/commit/341f8a8eb8d99663e15796e373c5bf78fc9364a6&lt;br /&gt;
&lt;br /&gt;
[4] https://github.com/janpisl/pywps/commit/321d6d8d6caf28131062134a5188eaa61c3e4b38&lt;br /&gt;
&lt;br /&gt;
[5] https://github.com/janpisl/pywps/commits/master&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Week 9=== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
- Together with my mentor we decided not to implement a functionality for handling metadata at this time.&lt;br /&gt;
&lt;br /&gt;
- I established a connection between PostgreSQL and SQLite and Mapserver [1]. This allows sample output data to be served as a WMS service and viewed in e.g. QGIS.&lt;br /&gt;
&lt;br /&gt;
- I created sample requests for both PostgreSQL and SQLite [2]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Edit current code and automatize connection with MapServer so any output data can be viewed as a WMS service.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/d88106eecfa08c30b945a6105f2eeaf978bfda8a&lt;br /&gt;
&lt;br /&gt;
[2] https://github.com/janpisl/pywps/commit/b50360d42f48ac8c99df1af005cbdf3951692465&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Week 10 === &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
- First draft of a script for generating MapFiles automatically with arguments retrieved from PostGIS. [1]. &lt;br /&gt;
&lt;br /&gt;
- Template MapFile. Individual MapFiles are generated based on this template. [2]&lt;br /&gt;
&lt;br /&gt;
- MapFile for raster data in PostGIS (raster layer) [3]&lt;br /&gt;
&lt;br /&gt;
- Implement generating MapFilese into tests (for vector data in PostGIS) [4]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Finish automatization of generating MapFiles for testing&lt;br /&gt;
&lt;br /&gt;
- Implement WMS for raster output data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/fda5a9613d39c5fd3079c8ae6d0e9ec3403d9877&lt;br /&gt;
&lt;br /&gt;
[2] https://github.com/janpisl/pywps/commit/04f2ef89b516bd00845bc27818613f939fa8ec54&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/commit/03167218ab0dd8f8946c33ddc77446967e3a58c8 &lt;br /&gt;
&lt;br /&gt;
[4] https://github.com/janpisl/pywps/commit/15e2fc9f250cdf24bc490e6c6d8e6f8cc39d98ff&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Week 11===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
- I resolved an error caused by test configuration being set only after initialization of the PgStorage class. [1]&lt;br /&gt;
&lt;br /&gt;
- I squashed all commits into one [2]&lt;br /&gt;
&lt;br /&gt;
- I created another branch (called database) where all the code for storing output to database is stored [3]&lt;br /&gt;
&lt;br /&gt;
- Some other minor changes and updates to the code and fixing bugs  [4]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- I might not have access to stable internet connection in the next week. I have informed my mentor about this.&lt;br /&gt;
&lt;br /&gt;
- My code will now go through testing and review from the PyWPS community so once these tests are done I will know what do I have to improve before I can make a pull request.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/eb4bcb6f5695564adb1a2e09ae2614816ec11a26&lt;br /&gt;
&lt;br /&gt;
[2] https://github.com/janpisl/pywps/commit/07327e0280d817db640064792fe349f24e296823&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/tree/database/pywps/inout&lt;br /&gt;
&lt;br /&gt;
[4] https://github.com/janpisl/pywps/commits/master&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Google Summer of Code]]&lt;/div&gt;</summary>
		<author><name>Wiki-Janpisl</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Database_Output_Storage_for_PyWPS&amp;diff=115897</id>
		<title>Database Output Storage for PyWPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Database_Output_Storage_for_PyWPS&amp;diff=115897"/>
		<updated>2018-07-29T15:57:06Z</updated>

		<summary type="html">&lt;p&gt;Wiki-Janpisl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
My name is Jan Pisl and I study at the Czech Technical University in Prague. I will be participating in this year's GSoC. My project’s aim is to develop database storage support for PyWPS that would allow output data to be stored in a database in a way that is compliant with the OGC WPS Standard. I will be using Python 3.6. &lt;br /&gt;
&lt;br /&gt;
== Project ==&lt;br /&gt;
Title: Database Output Storage for PyWPS&lt;br /&gt;
&lt;br /&gt;
Student: Jan Pišl&lt;br /&gt;
&lt;br /&gt;
Mentors: [[User:Jachym|Jáchym Čepický]], [[User:Martinl|Martin Landa]].&lt;br /&gt;
&lt;br /&gt;
Project's repositories: [https://github.com/janpisl/pywps GitHub repository], [https://summerofcode.withgoogle.com/projects/#5084513521106944 Project's page on GSoC website] &lt;br /&gt;
&lt;br /&gt;
== Technology ==&lt;br /&gt;
&lt;br /&gt;
=== PyWPS ===&lt;br /&gt;
PyWPS is a server side implementation of the OGC Web Processing Service (OGC&lt;br /&gt;
WPS) standards 1.0.0. It is written in the Python programming language, it runs&lt;br /&gt;
on Python 2.7, 3.3 or higher and it is tested and developed on Linux. It uses&lt;br /&gt;
a ConfigParser format for configuration files. It supports a variety of geospatial&lt;br /&gt;
software and tools such as GRASS GIS, R Project or the GDAL library. Synchronous&lt;br /&gt;
and asynchronuous invocations are supported. As for request encoding, two options&lt;br /&gt;
are available - key-value pairs (using HTTP-GET) or XML payload (using HTTPPOST).&lt;br /&gt;
Every process that is to be deployed on the server is defined as a class&lt;br /&gt;
and has several mandatory parameters. The key parameter called &amp;quot;handler&amp;quot; gets&lt;br /&gt;
invoked every time there is an incoming request, it accepts the request and returns&lt;br /&gt;
a response.&lt;br /&gt;
&lt;br /&gt;
In 2016, it upgraded from PyWPS 3 to PyWPS 4. Some of the more significant&lt;br /&gt;
changes include every input being considered a list of inputs and all inputs having&lt;br /&gt;
file, data and stream attributes. These attributes allow better manipulation&lt;br /&gt;
with data.&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&lt;br /&gt;
Python is a high-level programming language that fully supports object-oriented and&lt;br /&gt;
structured programming. Developed in the late 1980s, the first version 0.9.0 was&lt;br /&gt;
released in 1991. In 2008, Python 3.0 was released. Currently, the most up-to-date&lt;br /&gt;
version available is 3.6.&lt;br /&gt;
It was designed as a syntactically simple language, using whitespace intendantion&lt;br /&gt;
instead of brackets and English words rather than punctuation. It is a dynamicallytyped&lt;br /&gt;
language, which means it is not neccessary to specify a data-type when defining&lt;br /&gt;
a variable. For its simplicity and readability, Python is often considered a good&lt;br /&gt;
first programming language to learn.&lt;br /&gt;
One of the key advantages of Python is its high extensibility. It provides large&lt;br /&gt;
standard libraries and also an extensive number of other modules, packages and&lt;br /&gt;
libraries, so most of the common programming tasks are already solved, scripted&lt;br /&gt;
and made available.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Dates !! Task !! Deliverables&lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period (April, 23 - May, 14) ||&lt;br /&gt;
Initial research on GDAL, MapServer, SQLAlchemy, GeoAlchemy, relational databases (PostgreSQL, Oracle, Microsoft SQL Server, MySQL, SQLite,...) &lt;br /&gt;
&lt;br /&gt;
Select which databases will be supported in this project.&lt;br /&gt;
&lt;br /&gt;
Set up environment for work - virtual environment with a distribution of Linux, instances of selected database management systems for testing. &lt;br /&gt;
| [https://docs.google.com/document/d/1DzdT0bcAmeU4EsoZlg8jBZmcfx6mIPe4Z8PRwsWzP_U/edit#heading=h.9dmblslll4ai Bonding Period Report]&lt;br /&gt;
|-&lt;br /&gt;
| Week 1 (May, 14 - May, 20) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Define “DbStorage”, an abstract base class that will ensure derived classes implement particular methods from this class. Define abstract methods that are necessary for writing output data to a remote database.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 2 (May, 21 - May, 27) ||&lt;br /&gt;
&lt;br /&gt;
Write test script that checks “PgStorage” will work correctly and write output vector data to a PostgreSQL database.&lt;br /&gt;
&lt;br /&gt;
Develop “PgStorage“ class that inherits from “DbStorage” and implements proposed functionality.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 3 (May, 28 - June, 3) ||&lt;br /&gt;
&lt;br /&gt;
Write a test (or update test written in the previous week) to ensure correct functionality of newly developed classes.&lt;br /&gt;
&lt;br /&gt;
Develop several classes based on selection in week 1 – e.g. “MSSQLStorage”, “OCIStorage”, “MySQLStorage”, etc.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 4 (June, 4 - June, 10) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Develop a mechanism for handling raster output data and implement it in the above-mentioned classes. If GDAL does not support writing raster data to a specific database by default, appropriate tool or library must be identified. For example, for writing raster data into PostgreSQL, ”raster2pgsql“ tool can be used.&lt;br /&gt;
&lt;br /&gt;
Decide how other types of data (such as string, table, CSV, etc.) will be handled and implement it.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 5 (June, 11 - June, 15) Phase 1 Evaluation||&lt;br /&gt;
&lt;br /&gt;
Write a test that checks all data types will get correctly stored in database.&lt;br /&gt;
&lt;br /&gt;
Write and submit weekly report.&lt;br /&gt;
&lt;br /&gt;
Write and submit Phase 1 evaluation.&lt;br /&gt;
&lt;br /&gt;
'''Deliverables for Phase 1:''' Correctly functioning and tested module that enables output data (vector, raster or other) to be stored in one of several database management systems.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 6 (June, 16 - June, 24) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Handle metadata. Currently, logs with information about run processes (such as when a process started and finished) are stored in a SQLite database. Implement a functionality that accesses logs, extracts desired metadata from them and saves them in the same database as output data. Use unique identifier of every process to join metadata (using primary key) with the corresponding output data (foreign key). For each run process, include expiration date to its output data.&lt;br /&gt;
&lt;br /&gt;
Develop a trigger that removes output data when it expires.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 7 (June, 25 - July, 1) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Establish a connection between database and MapServer and allow MapServer to access output data stored in database.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 8 (July, 2 - July, 8) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable output data to be viewed as WMS services through MapServer.&lt;br /&gt;
&lt;br /&gt;
Edit current code so the reference embodied in the responding document is a URL link to a running MapServer service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 9 (July, 9 - July, 13) Phase 2 Evaluation||&lt;br /&gt;
&lt;br /&gt;
Write and submit Phase 2 evaluation.&lt;br /&gt;
&lt;br /&gt;
'''Deliverables for Phase 2''': Correctly functioning and tested module that enables output data to be viewed as a Web Map Service using MapServer.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 10 (July, 14 - July, 22) ||&lt;br /&gt;
&lt;br /&gt;
Update previously developed test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable raster output data to be accessed and/or edited as OGC Web Coverage Service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 11 (July, 23 - July, 29) ||&lt;br /&gt;
&lt;br /&gt;
Update previously developed test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable vector output data to be accessed and/or edited as OGC Web Feature Service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 12 (July, 30 - August, 5) ||&lt;br /&gt;
&lt;br /&gt;
Write a test that ensures newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Develop a demo that demonstrates implemented functionality.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 13 (August, 6 - August, 14)&lt;br /&gt;
&lt;br /&gt;
||Create documentation that can be added to the current PyWPS documentation.&lt;br /&gt;
&lt;br /&gt;
Finalize work, clean code and prepare a pull request(s) to PyWPS GitHub repository.&lt;br /&gt;
&lt;br /&gt;
Write and submit final report.&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Reports ==&lt;br /&gt;
=== Bonding Period ===&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/document/d/1DzdT0bcAmeU4EsoZlg8jBZmcfx6mIPe4Z8PRwsWzP_U/edit#heading=h.9dmblslll4ai Bonding Period Report]&lt;br /&gt;
&lt;br /&gt;
=== Week 1===&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
I defined the first version of “DbStorage”, a class that will allow output data to be stored in one of RDBMSs supported (PostGIS, MS Server, Oracle spatial, SpatiaLite) [1]&lt;br /&gt;
I downloaded PostgreSQL and PostGIS and run it locally on my computer. I tested it functions correctly by using code I had written previously to GSoC [2] that stores output data in PostGIS. I run some of PyWPS test processes and checked output data does get stored in PostGIS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
Implement PGStorage, a class within the DbStorage class that will store output data to PostGIS and returns database name, schema and table as a reference to the client. &lt;br /&gt;
Start working on implementing MSServerStorage, OciStorage and SpatiaLiteStorage.&lt;br /&gt;
Download, run and test SpatiaLite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/45b98e04c428c2e62643a42bbebfedf8efc0603e&lt;br /&gt;
&lt;br /&gt;
[2] https://github.com/ctu-geoforall-lab-projects/bp-pisl-2018-pywps/commit/c364be4888d74b2285e5a348afc6c3fe184fbc64&lt;br /&gt;
&lt;br /&gt;
=== Week 2===&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
Develop and implement PGStorage, a class within the DbStorage class that will store output data to PostGIS and returns database name, schema and table as a reference to the client.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Study materials on Factory design pattern [2] recommended by my mentor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Download, run and test SpatiaLite. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
Develop, implement and test _MSSQLStorage and _OciStorage _MySQLStorage classes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
I have some questions related to work I will be doing next week. I will consult with my mentor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/254b1e5697c0b4781544a6329b52eb4688e60a22&lt;br /&gt;
&lt;br /&gt;
[2]  http://python-3-patterns-idioms-test.readthedocs.io/en/latest/Factory.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Week 3 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Following my mentor's advice, I made a decision that _MSSQLStorage,  _OciStorage _MySQLStorage classes will not be implemented at this stage. There will only be PgStorage and SQLiteStorage that store data in a PostgreSQL and SQLite databases, respectively &lt;br /&gt;
&lt;br /&gt;
- Define DbStorageAbstract, an abstract class from which PgStorage and SQLiteStorage will inherit [1]&lt;br /&gt;
&lt;br /&gt;
- Develop and implement SQLiteStorage [2] &lt;br /&gt;
&lt;br /&gt;
- Fix/Update DbStorage class [3] &lt;br /&gt;
&lt;br /&gt;
- Update outputs.py so complex output data is either stored as files or in a database depending on configuration [4]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Develop a mechanism for handling raster output data and implement it.&lt;br /&gt;
&lt;br /&gt;
- Decide how other types of data (such as string, table, CSV, etc.) will be handled and implement it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
There is an error occuring when I run PyWPS and I haven't been able to find out what is causing it. I will discuss this with my mentor on a call on Monday morning.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/89ab12a2fd883a0df6c070a4ca573f89b6c31a5a&lt;br /&gt;
&lt;br /&gt;
[2]  https://github.com/janpisl/pywps/commit/864d275fe8c47e41c07f8278b8037e80a0b0b838&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/commit/c0d698cefde9a5085cd7d76bb0e32156a6391880 &lt;br /&gt;
&lt;br /&gt;
[4] https://github.com/janpisl/pywps/commit/7f00fa06ac5fd7823d79a363f6163dcc38e7bbb0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Week 4 === &lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
-I changed the structure of the code. Classes PgStorage and SQLiteStorage are now stored in separate files in the db folder. FileStorage is in a separate file, too. Rest of the code is in the __init__ files. [1]&lt;br /&gt;
&lt;br /&gt;
- I added the data_type attribute to inout/formats/__init__.py. At the moment, allowed values are either vector or raster using the enum module. This was done so when storing output data it can be differed between raster and vector data and appropriate method can be used. [2]&lt;br /&gt;
&lt;br /&gt;
- The Dbstorage class has been simplified. Instead of creating an instance of the class in outputs.py and calling the get_db_type method in the constructor, get_db_type is now a static method and gets called directly in outputs.py [3]&lt;br /&gt;
&lt;br /&gt;
- PgStorage accesses the data_type value and calls appropriate method (store_vector_output or store_raster_output) [4]&lt;br /&gt;
&lt;br /&gt;
- I implemented the store_raster_output method in the PgStorage class [5]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Implement store_raster_output for SQLiteStorage&lt;br /&gt;
&lt;br /&gt;
- Implement another method for storing other types of data (string, CSV, etc.)&lt;br /&gt;
&lt;br /&gt;
- Write a script that tests whether different data types get stored correctly&lt;br /&gt;
&lt;br /&gt;
- Submit the Phase 1 evaluation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/18c46864ff75fb01e3c7d76f3f4a1b6d2457a22f[[2]  https://github.com/janpisl/pywps/commit/4bb079bfcde0b4fcc42393f531e86c47a91507d4&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/commit/80c61c92e183c06af741fe94d0b172f9a5940609&lt;br /&gt;
&lt;br /&gt;
[4] https://github.com/janpisl/pywps/commit/e024b1e5d1eb8df1a79989a59b14276b2757d98d&lt;br /&gt;
&lt;br /&gt;
[5] https://github.com/janpisl/pywps/commit/a09dfc61729b36eb81ddd0d9adb5bda2effe3029&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Week 5=== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
- I updated the store_vector_output method in the SQLite class [1]&lt;br /&gt;
&lt;br /&gt;
- I implemented a method for storing raster outputs in SQLite [2]&lt;br /&gt;
&lt;br /&gt;
- I implemented a method for storing output data of other datatypes in PostgreSQL [3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Write test_storage, a unit test that would test all storage options and their correct functionality&lt;br /&gt;
&lt;br /&gt;
- Handle metadata&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/44e9130c8bbb73841c51a09266a9db62ff2809f9&lt;br /&gt;
&lt;br /&gt;
[2]  https://github.com/janpisl/pywps/commit/5bf8eb883343f0caacd47470bf79152ac751d480&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/commit/50cd11ffa2486ee3de7cac3340874179d81d4e2e&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Week 6 === &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
''' &lt;br /&gt;
&lt;br /&gt;
- Database schema gets created automatically when the DbStorage class is initialized. [1]&lt;br /&gt;
&lt;br /&gt;
- I developed &amp;quot;test_storage&amp;quot; module for testing storing output data [2]&lt;br /&gt;
&lt;br /&gt;
- I implemented unittest classes for testing file storage [3], PostgreSQL storage [4] [5] [6] and SQLite [7] [8]&lt;br /&gt;
&lt;br /&gt;
- Some other minor changes and updates to the code and fixing bugs [9]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Address issues revealed by testing&lt;br /&gt;
&lt;br /&gt;
- Handle metadata&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/524d65f2cb5cdfe5f0bbdf769a9850c32886952e&lt;br /&gt;
&lt;br /&gt;
[2]  https://github.com/janpisl/pywps/commit/1c36dd1ee3b1c61d819b92f5a195792f488b1193&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/commit/2896d7670ed2f38470eab54790ed2e822c42583d&lt;br /&gt;
&lt;br /&gt;
[4] https://github.com/janpisl/pywps/commit/97c8255a9ea3ad52a022d84315eb4e725afe4fc6&lt;br /&gt;
&lt;br /&gt;
[5] https://github.com/janpisl/pywps/commit/16afbea95f1fea31dd3ac9e7a30d63b5d309ad12&lt;br /&gt;
&lt;br /&gt;
[6] https://github.com/janpisl/pywps/commit/b08dee2644888379d08c25919d112b0e29f2423d&lt;br /&gt;
&lt;br /&gt;
[7] https://github.com/janpisl/pywps/commit/c406e21d8ee844e468fe672d236285664a8fde76&lt;br /&gt;
&lt;br /&gt;
[8] https://github.com/janpisl/pywps/commit/a1493e70024d06b3d29d1522edca64af4574de0b&lt;br /&gt;
&lt;br /&gt;
[9] https://github.com/janpisl/pywps/commits/master&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Week 8=== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
- PgStorage and SQLiteStorage classes inherit from DbStorage [1]&lt;br /&gt;
&lt;br /&gt;
- The &amp;quot;store&amp;quot; method is now implemented in the parent class DbStorage&lt;br /&gt;
&lt;br /&gt;
- Method for storing vector outputs is now implemented in the parent class DbStorage [2]&lt;br /&gt;
&lt;br /&gt;
- Method for storing outputs such as CSV, plain text, etc. is now implemented in the parent class DbStorage [3]&lt;br /&gt;
&lt;br /&gt;
- Each class inheriting from DbStorage now implements a method for initializating database (create schema, etc.) [4]&lt;br /&gt;
&lt;br /&gt;
- Fixing bugs and some other minor changes and updates to the code [5]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Download, compile and run MapServer&lt;br /&gt;
&lt;br /&gt;
- Establish a connection between MapServer and PostgreSQL&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/889ce577747815554970c3c39cebed15fe1d1ca6&lt;br /&gt;
&lt;br /&gt;
[2] https://github.com/janpisl/pywps/commit/68d193aed029e4c6c4d6e8ec73ac44de8c183b71&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/commit/341f8a8eb8d99663e15796e373c5bf78fc9364a6&lt;br /&gt;
&lt;br /&gt;
[4] https://github.com/janpisl/pywps/commit/321d6d8d6caf28131062134a5188eaa61c3e4b38&lt;br /&gt;
&lt;br /&gt;
[5] https://github.com/janpisl/pywps/commits/master&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Week 9=== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
- Together with my mentor we decided not to implement a functionality for handling metadata at this time.&lt;br /&gt;
&lt;br /&gt;
- I established a connection between PostgreSQL and SQLite and Mapserver [1]. This allows sample output data to be served as a WMS service and viewed in e.g. QGIS.&lt;br /&gt;
&lt;br /&gt;
- I created sample requests for both PostgreSQL and SQLite [2]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Edit current code and automatize connection with MapServer so any output data can be viewed as a WMS service.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/d88106eecfa08c30b945a6105f2eeaf978bfda8a&lt;br /&gt;
&lt;br /&gt;
[2] https://github.com/janpisl/pywps/commit/b50360d42f48ac8c99df1af005cbdf3951692465&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Week 10 === &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
- First draft of a script for generating MapFiles automatically with arguments retrieved from PostGIS. [1]. &lt;br /&gt;
&lt;br /&gt;
- Template MapFile. Individual MapFiles are generated based on this template. [2]&lt;br /&gt;
&lt;br /&gt;
- MapFile for raster data in PostGIS (raster layer) [3]&lt;br /&gt;
&lt;br /&gt;
- Implement generating MapFilese into tests (for vector data in PostGIS) [4]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Finish automatization of generating MapFiles for testing&lt;br /&gt;
&lt;br /&gt;
- Implement WMS for raster output data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/fda5a9613d39c5fd3079c8ae6d0e9ec3403d9877&lt;br /&gt;
&lt;br /&gt;
[2] https://github.com/janpisl/pywps/commit/04f2ef89b516bd00845bc27818613f939fa8ec54&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/commit/03167218ab0dd8f8946c33ddc77446967e3a58c8 &lt;br /&gt;
&lt;br /&gt;
[4] https://github.com/janpisl/pywps/commit/15e2fc9f250cdf24bc490e6c6d8e6f8cc39d98ff&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Week 11===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
- I resolved an error caused by test configuration being set only after initialization of the PgStorage class. [1]&lt;br /&gt;
&lt;br /&gt;
- I squashed all commits into one [2]&lt;br /&gt;
&lt;br /&gt;
- I created another branch (called database) where all the code for storing output to database is stored [3]&lt;br /&gt;
&lt;br /&gt;
- Some other minor changes and updates to the code and fixing bugs  [4]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- I might not have access to stable internet connection in the next week so I might . I have informed my mentor about this&lt;br /&gt;
&lt;br /&gt;
- My code will now go through testing and review from the PyWPS community so once these tests are done I will know what do I have to improve before I can make a pull request.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/eb4bcb6f5695564adb1a2e09ae2614816ec11a26&lt;br /&gt;
&lt;br /&gt;
[2] https://github.com/janpisl/pywps/commit/07327e0280d817db640064792fe349f24e296823&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/tree/database/pywps/inout&lt;br /&gt;
&lt;br /&gt;
[4] https://github.com/janpisl/pywps/commits/master&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Google Summer of Code]]&lt;/div&gt;</summary>
		<author><name>Wiki-Janpisl</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Database_Output_Storage_for_PyWPS&amp;diff=115816</id>
		<title>Database Output Storage for PyWPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Database_Output_Storage_for_PyWPS&amp;diff=115816"/>
		<updated>2018-07-24T19:35:00Z</updated>

		<summary type="html">&lt;p&gt;Wiki-Janpisl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
My name is Jan Pisl and I study at the Czech Technical University in Prague. I will be participating in this year's GSoC. My project’s aim is to develop database storage support for PyWPS that would allow output data to be stored in a database in a way that is compliant with the OGC WPS Standard. I will be using Python 3.6. &lt;br /&gt;
&lt;br /&gt;
== Project ==&lt;br /&gt;
Title: Database Output Storage for PyWPS&lt;br /&gt;
&lt;br /&gt;
Student: Jan Pišl&lt;br /&gt;
&lt;br /&gt;
Mentors: [[User:Jachym|Jáchym Čepický]], [[User:Martinl|Martin Landa]].&lt;br /&gt;
&lt;br /&gt;
Project's repositories: [https://github.com/janpisl/pywps GitHub repository], [https://summerofcode.withgoogle.com/projects/#5084513521106944 Project's page on GSoC website] &lt;br /&gt;
&lt;br /&gt;
== Technology ==&lt;br /&gt;
&lt;br /&gt;
=== PyWPS ===&lt;br /&gt;
PyWPS is a server side implementation of the OGC Web Processing Service (OGC&lt;br /&gt;
WPS) standards 1.0.0. It is written in the Python programming language, it runs&lt;br /&gt;
on Python 2.7, 3.3 or higher and it is tested and developed on Linux. It uses&lt;br /&gt;
a ConfigParser format for configuration files. It supports a variety of geospatial&lt;br /&gt;
software and tools such as GRASS GIS, R Project or the GDAL library. Synchronous&lt;br /&gt;
and asynchronuous invocations are supported. As for request encoding, two options&lt;br /&gt;
are available - key-value pairs (using HTTP-GET) or XML payload (using HTTPPOST).&lt;br /&gt;
Every process that is to be deployed on the server is defined as a class&lt;br /&gt;
and has several mandatory parameters. The key parameter called &amp;quot;handler&amp;quot; gets&lt;br /&gt;
invoked every time there is an incoming request, it accepts the request and returns&lt;br /&gt;
a response.&lt;br /&gt;
&lt;br /&gt;
In 2016, it upgraded from PyWPS 3 to PyWPS 4. Some of the more significant&lt;br /&gt;
changes include every input being considered a list of inputs and all inputs having&lt;br /&gt;
file, data and stream attributes. These attributes allow better manipulation&lt;br /&gt;
with data.&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&lt;br /&gt;
Python is a high-level programming language that fully supports object-oriented and&lt;br /&gt;
structured programming. Developed in the late 1980s, the first version 0.9.0 was&lt;br /&gt;
released in 1991. In 2008, Python 3.0 was released. Currently, the most up-to-date&lt;br /&gt;
version available is 3.6.&lt;br /&gt;
It was designed as a syntactically simple language, using whitespace intendantion&lt;br /&gt;
instead of brackets and English words rather than punctuation. It is a dynamicallytyped&lt;br /&gt;
language, which means it is not neccessary to specify a data-type when defining&lt;br /&gt;
a variable. For its simplicity and readability, Python is often considered a good&lt;br /&gt;
first programming language to learn.&lt;br /&gt;
One of the key advantages of Python is its high extensibility. It provides large&lt;br /&gt;
standard libraries and also an extensive number of other modules, packages and&lt;br /&gt;
libraries, so most of the common programming tasks are already solved, scripted&lt;br /&gt;
and made available.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Dates !! Task !! Deliverables&lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period (April, 23 - May, 14) ||&lt;br /&gt;
Initial research on GDAL, MapServer, SQLAlchemy, GeoAlchemy, relational databases (PostgreSQL, Oracle, Microsoft SQL Server, MySQL, SQLite,...) &lt;br /&gt;
&lt;br /&gt;
Select which databases will be supported in this project.&lt;br /&gt;
&lt;br /&gt;
Set up environment for work - virtual environment with a distribution of Linux, instances of selected database management systems for testing. &lt;br /&gt;
| [https://docs.google.com/document/d/1DzdT0bcAmeU4EsoZlg8jBZmcfx6mIPe4Z8PRwsWzP_U/edit#heading=h.9dmblslll4ai Bonding Period Report]&lt;br /&gt;
|-&lt;br /&gt;
| Week 1 (May, 14 - May, 20) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Define “DbStorage”, an abstract base class that will ensure derived classes implement particular methods from this class. Define abstract methods that are necessary for writing output data to a remote database.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 2 (May, 21 - May, 27) ||&lt;br /&gt;
&lt;br /&gt;
Write test script that checks “PgStorage” will work correctly and write output vector data to a PostgreSQL database.&lt;br /&gt;
&lt;br /&gt;
Develop “PgStorage“ class that inherits from “DbStorage” and implements proposed functionality.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 3 (May, 28 - June, 3) ||&lt;br /&gt;
&lt;br /&gt;
Write a test (or update test written in the previous week) to ensure correct functionality of newly developed classes.&lt;br /&gt;
&lt;br /&gt;
Develop several classes based on selection in week 1 – e.g. “MSSQLStorage”, “OCIStorage”, “MySQLStorage”, etc.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 4 (June, 4 - June, 10) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Develop a mechanism for handling raster output data and implement it in the above-mentioned classes. If GDAL does not support writing raster data to a specific database by default, appropriate tool or library must be identified. For example, for writing raster data into PostgreSQL, ”raster2pgsql“ tool can be used.&lt;br /&gt;
&lt;br /&gt;
Decide how other types of data (such as string, table, CSV, etc.) will be handled and implement it.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 5 (June, 11 - June, 15) Phase 1 Evaluation||&lt;br /&gt;
&lt;br /&gt;
Write a test that checks all data types will get correctly stored in database.&lt;br /&gt;
&lt;br /&gt;
Write and submit weekly report.&lt;br /&gt;
&lt;br /&gt;
Write and submit Phase 1 evaluation.&lt;br /&gt;
&lt;br /&gt;
'''Deliverables for Phase 1:''' Correctly functioning and tested module that enables output data (vector, raster or other) to be stored in one of several database management systems.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 6 (June, 16 - June, 24) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Handle metadata. Currently, logs with information about run processes (such as when a process started and finished) are stored in a SQLite database. Implement a functionality that accesses logs, extracts desired metadata from them and saves them in the same database as output data. Use unique identifier of every process to join metadata (using primary key) with the corresponding output data (foreign key). For each run process, include expiration date to its output data.&lt;br /&gt;
&lt;br /&gt;
Develop a trigger that removes output data when it expires.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 7 (June, 25 - July, 1) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Establish a connection between database and MapServer and allow MapServer to access output data stored in database.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 8 (July, 2 - July, 8) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable output data to be viewed as WMS services through MapServer.&lt;br /&gt;
&lt;br /&gt;
Edit current code so the reference embodied in the responding document is a URL link to a running MapServer service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 9 (July, 9 - July, 13) Phase 2 Evaluation||&lt;br /&gt;
&lt;br /&gt;
Write and submit Phase 2 evaluation.&lt;br /&gt;
&lt;br /&gt;
'''Deliverables for Phase 2''': Correctly functioning and tested module that enables output data to be viewed as a Web Map Service using MapServer.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 10 (July, 14 - July, 22) ||&lt;br /&gt;
&lt;br /&gt;
Update previously developed test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable raster output data to be accessed and/or edited as OGC Web Coverage Service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 11 (July, 23 - July, 29) ||&lt;br /&gt;
&lt;br /&gt;
Update previously developed test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable vector output data to be accessed and/or edited as OGC Web Feature Service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 12 (July, 30 - August, 5) ||&lt;br /&gt;
&lt;br /&gt;
Write a test that ensures newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Develop a demo that demonstrates implemented functionality.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 13 (August, 6 - August, 14)&lt;br /&gt;
&lt;br /&gt;
||Create documentation that can be added to the current PyWPS documentation.&lt;br /&gt;
&lt;br /&gt;
Finalize work, clean code and prepare a pull request(s) to PyWPS GitHub repository.&lt;br /&gt;
&lt;br /&gt;
Write and submit final report.&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Reports ==&lt;br /&gt;
=== Bonding Period ===&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/document/d/1DzdT0bcAmeU4EsoZlg8jBZmcfx6mIPe4Z8PRwsWzP_U/edit#heading=h.9dmblslll4ai Bonding Period Report]&lt;br /&gt;
&lt;br /&gt;
=== Week 1===&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
I defined the first version of “DbStorage”, a class that will allow output data to be stored in one of RDBMSs supported (PostGIS, MS Server, Oracle spatial, SpatiaLite) [1]&lt;br /&gt;
I downloaded PostgreSQL and PostGIS and run it locally on my computer. I tested it functions correctly by using code I had written previously to GSoC [2] that stores output data in PostGIS. I run some of PyWPS test processes and checked output data does get stored in PostGIS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
Implement PGStorage, a class within the DbStorage class that will store output data to PostGIS and returns database name, schema and table as a reference to the client. &lt;br /&gt;
Start working on implementing MSServerStorage, OciStorage and SpatiaLiteStorage.&lt;br /&gt;
Download, run and test SpatiaLite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/45b98e04c428c2e62643a42bbebfedf8efc0603e&lt;br /&gt;
&lt;br /&gt;
[2] https://github.com/ctu-geoforall-lab-projects/bp-pisl-2018-pywps/commit/c364be4888d74b2285e5a348afc6c3fe184fbc64&lt;br /&gt;
&lt;br /&gt;
=== Week 2===&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
Develop and implement PGStorage, a class within the DbStorage class that will store output data to PostGIS and returns database name, schema and table as a reference to the client.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Study materials on Factory design pattern [2] recommended by my mentor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Download, run and test SpatiaLite. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
Develop, implement and test _MSSQLStorage and _OciStorage _MySQLStorage classes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
I have some questions related to work I will be doing next week. I will consult with my mentor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/254b1e5697c0b4781544a6329b52eb4688e60a22&lt;br /&gt;
&lt;br /&gt;
[2]  http://python-3-patterns-idioms-test.readthedocs.io/en/latest/Factory.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Week 3 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Following my mentor's advice, I made a decision that _MSSQLStorage,  _OciStorage _MySQLStorage classes will not be implemented at this stage. There will only be PgStorage and SQLiteStorage that store data in a PostgreSQL and SQLite databases, respectively &lt;br /&gt;
&lt;br /&gt;
- Define DbStorageAbstract, an abstract class from which PgStorage and SQLiteStorage will inherit [1]&lt;br /&gt;
&lt;br /&gt;
- Develop and implement SQLiteStorage [2] &lt;br /&gt;
&lt;br /&gt;
- Fix/Update DbStorage class [3] &lt;br /&gt;
&lt;br /&gt;
- Update outputs.py so complex output data is either stored as files or in a database depending on configuration [4]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Develop a mechanism for handling raster output data and implement it.&lt;br /&gt;
&lt;br /&gt;
- Decide how other types of data (such as string, table, CSV, etc.) will be handled and implement it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
There is an error occuring when I run PyWPS and I haven't been able to find out what is causing it. I will discuss this with my mentor on a call on Monday morning.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/89ab12a2fd883a0df6c070a4ca573f89b6c31a5a&lt;br /&gt;
&lt;br /&gt;
[2]  https://github.com/janpisl/pywps/commit/864d275fe8c47e41c07f8278b8037e80a0b0b838&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/commit/c0d698cefde9a5085cd7d76bb0e32156a6391880 &lt;br /&gt;
&lt;br /&gt;
[4] https://github.com/janpisl/pywps/commit/7f00fa06ac5fd7823d79a363f6163dcc38e7bbb0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Week 4 === &lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
-I changed the structure of the code. Classes PgStorage and SQLiteStorage are now stored in separate files in the db folder. FileStorage is in a separate file, too. Rest of the code is in the __init__ files. [1]&lt;br /&gt;
&lt;br /&gt;
- I added the data_type attribute to inout/formats/__init__.py. At the moment, allowed values are either vector or raster using the enum module. This was done so when storing output data it can be differed between raster and vector data and appropriate method can be used. [2]&lt;br /&gt;
&lt;br /&gt;
- The Dbstorage class has been simplified. Instead of creating an instance of the class in outputs.py and calling the get_db_type method in the constructor, get_db_type is now a static method and gets called directly in outputs.py [3]&lt;br /&gt;
&lt;br /&gt;
- PgStorage accesses the data_type value and calls appropriate method (store_vector_output or store_raster_output) [4]&lt;br /&gt;
&lt;br /&gt;
- I implemented the store_raster_output method in the PgStorage class [5]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Implement store_raster_output for SQLiteStorage&lt;br /&gt;
&lt;br /&gt;
- Implement another method for storing other types of data (string, CSV, etc.)&lt;br /&gt;
&lt;br /&gt;
- Write a script that tests whether different data types get stored correctly&lt;br /&gt;
&lt;br /&gt;
- Submit the Phase 1 evaluation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/18c46864ff75fb01e3c7d76f3f4a1b6d2457a22f[[2]  https://github.com/janpisl/pywps/commit/4bb079bfcde0b4fcc42393f531e86c47a91507d4&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/commit/80c61c92e183c06af741fe94d0b172f9a5940609&lt;br /&gt;
&lt;br /&gt;
[4] https://github.com/janpisl/pywps/commit/e024b1e5d1eb8df1a79989a59b14276b2757d98d&lt;br /&gt;
&lt;br /&gt;
[5] https://github.com/janpisl/pywps/commit/a09dfc61729b36eb81ddd0d9adb5bda2effe3029&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Week 5=== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
- I updated the store_vector_output method in the SQLite class [1]&lt;br /&gt;
&lt;br /&gt;
- I implemented a method for storing raster outputs in SQLite [2]&lt;br /&gt;
&lt;br /&gt;
- I implemented a method for storing output data of other datatypes in PostgreSQL [3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Write test_storage, a unit test that would test all storage options and their correct functionality&lt;br /&gt;
&lt;br /&gt;
- Handle metadata&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/44e9130c8bbb73841c51a09266a9db62ff2809f9&lt;br /&gt;
&lt;br /&gt;
[2]  https://github.com/janpisl/pywps/commit/5bf8eb883343f0caacd47470bf79152ac751d480&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/commit/50cd11ffa2486ee3de7cac3340874179d81d4e2e&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Week 6 === &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
''' &lt;br /&gt;
&lt;br /&gt;
- Database schema gets created automatically when the DbStorage class is initialized. [1]&lt;br /&gt;
&lt;br /&gt;
- I developed &amp;quot;test_storage&amp;quot; module for testing storing output data [2]&lt;br /&gt;
&lt;br /&gt;
- I implemented unittest classes for testing file storage [3], PostgreSQL storage [4] [5] [6] and SQLite [7] [8]&lt;br /&gt;
&lt;br /&gt;
- Some other minor changes and updates to the code and fixing bugs [9]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Address issues revealed by testing&lt;br /&gt;
&lt;br /&gt;
- Handle metadata&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/524d65f2cb5cdfe5f0bbdf769a9850c32886952e&lt;br /&gt;
&lt;br /&gt;
[2]  https://github.com/janpisl/pywps/commit/1c36dd1ee3b1c61d819b92f5a195792f488b1193&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/commit/2896d7670ed2f38470eab54790ed2e822c42583d&lt;br /&gt;
&lt;br /&gt;
[4] https://github.com/janpisl/pywps/commit/97c8255a9ea3ad52a022d84315eb4e725afe4fc6&lt;br /&gt;
&lt;br /&gt;
[5] https://github.com/janpisl/pywps/commit/16afbea95f1fea31dd3ac9e7a30d63b5d309ad12&lt;br /&gt;
&lt;br /&gt;
[6] https://github.com/janpisl/pywps/commit/b08dee2644888379d08c25919d112b0e29f2423d&lt;br /&gt;
&lt;br /&gt;
[7] https://github.com/janpisl/pywps/commit/c406e21d8ee844e468fe672d236285664a8fde76&lt;br /&gt;
&lt;br /&gt;
[8] https://github.com/janpisl/pywps/commit/a1493e70024d06b3d29d1522edca64af4574de0b&lt;br /&gt;
&lt;br /&gt;
[9] https://github.com/janpisl/pywps/commits/master&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Week 8=== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
- PgStorage and SQLiteStorage classes inherit from DbStorage [1]&lt;br /&gt;
&lt;br /&gt;
- The &amp;quot;store&amp;quot; method is now implemented in the parent class DbStorage&lt;br /&gt;
&lt;br /&gt;
- Method for storing vector outputs is now implemented in the parent class DbStorage [2]&lt;br /&gt;
&lt;br /&gt;
- Method for storing outputs such as CSV, plain text, etc. is now implemented in the parent class DbStorage [3]&lt;br /&gt;
&lt;br /&gt;
- Each class inheriting from DbStorage now implements a method for initializating database (create schema, etc.) [4]&lt;br /&gt;
&lt;br /&gt;
- Fixing bugs and some other minor changes and updates to the code [5]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Download, compile and run MapServer&lt;br /&gt;
&lt;br /&gt;
- Establish a connection between MapServer and PostgreSQL&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/889ce577747815554970c3c39cebed15fe1d1ca6&lt;br /&gt;
&lt;br /&gt;
[2] https://github.com/janpisl/pywps/commit/68d193aed029e4c6c4d6e8ec73ac44de8c183b71&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/commit/341f8a8eb8d99663e15796e373c5bf78fc9364a6&lt;br /&gt;
&lt;br /&gt;
[4] https://github.com/janpisl/pywps/commit/321d6d8d6caf28131062134a5188eaa61c3e4b38&lt;br /&gt;
&lt;br /&gt;
[5] https://github.com/janpisl/pywps/commits/master&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Week 9=== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
- Together with my mentor we decided not to implement a functionality for handling metadata at this time.&lt;br /&gt;
&lt;br /&gt;
- I established a connection between PostgreSQL and SQLite and Mapserver [1]. This allows sample output data to be served as a WMS service and viewed in e.g. QGIS.&lt;br /&gt;
&lt;br /&gt;
- I created sample requests for both PostgreSQL and SQLite [2]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Edit current code and automatize connection with MapServer so any output data can be viewed as a WMS service.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/d88106eecfa08c30b945a6105f2eeaf978bfda8a&lt;br /&gt;
&lt;br /&gt;
[2] https://github.com/janpisl/pywps/commit/b50360d42f48ac8c99df1af005cbdf3951692465&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Week 10 === &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
- First draft of a script for generating MapFiles automatically with arguments retrieved from PostGIS. [1]. &lt;br /&gt;
&lt;br /&gt;
- Template MapFile. Individual MapFiles are generated based on this template. [2]&lt;br /&gt;
&lt;br /&gt;
- MapFile for raster data in PostGIS (raster layer) [3]&lt;br /&gt;
&lt;br /&gt;
- Implement generating MapFilese into tests (for vector data in PostGIS) [4]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Finish automatization of generating MapFiles for testing&lt;br /&gt;
&lt;br /&gt;
- Implement WMS for raster output data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/fda5a9613d39c5fd3079c8ae6d0e9ec3403d9877&lt;br /&gt;
&lt;br /&gt;
[2] https://github.com/janpisl/pywps/commit/04f2ef89b516bd00845bc27818613f939fa8ec54&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/commit/03167218ab0dd8f8946c33ddc77446967e3a58c8 &lt;br /&gt;
&lt;br /&gt;
[4] https://github.com/janpisl/pywps/commit/15e2fc9f250cdf24bc490e6c6d8e6f8cc39d98ff&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Google Summer of Code]]&lt;/div&gt;</summary>
		<author><name>Wiki-Janpisl</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Database_Output_Storage_for_PyWPS&amp;diff=115782</id>
		<title>Database Output Storage for PyWPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Database_Output_Storage_for_PyWPS&amp;diff=115782"/>
		<updated>2018-07-23T07:07:45Z</updated>

		<summary type="html">&lt;p&gt;Wiki-Janpisl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
My name is Jan Pisl and I study at the Czech Technical University in Prague. I will be participating in this year's GSoC. My project’s aim is to develop database storage support for PyWPS that would allow output data to be stored in a database in a way that is compliant with the OGC WPS Standard. I will be using Python 3.6. &lt;br /&gt;
&lt;br /&gt;
== Project ==&lt;br /&gt;
Title: Database Output Storage for PyWPS&lt;br /&gt;
&lt;br /&gt;
Student: Jan Pišl&lt;br /&gt;
&lt;br /&gt;
Mentors: [[User:Jachym|Jáchym Čepický]], [[User:Martinl|Martin Landa]].&lt;br /&gt;
&lt;br /&gt;
Project's repositories: [https://github.com/janpisl/pywps GitHub repository], [https://summerofcode.withgoogle.com/projects/#5084513521106944 Project's page on GSoC website] &lt;br /&gt;
&lt;br /&gt;
== Technology ==&lt;br /&gt;
&lt;br /&gt;
=== PyWPS ===&lt;br /&gt;
PyWPS is a server side implementation of the OGC Web Processing Service (OGC&lt;br /&gt;
WPS) standards 1.0.0. It is written in the Python programming language, it runs&lt;br /&gt;
on Python 2.7, 3.3 or higher and it is tested and developed on Linux. It uses&lt;br /&gt;
a ConfigParser format for configuration files. It supports a variety of geospatial&lt;br /&gt;
software and tools such as GRASS GIS, R Project or the GDAL library. Synchronous&lt;br /&gt;
and asynchronuous invocations are supported. As for request encoding, two options&lt;br /&gt;
are available - key-value pairs (using HTTP-GET) or XML payload (using HTTPPOST).&lt;br /&gt;
Every process that is to be deployed on the server is defined as a class&lt;br /&gt;
and has several mandatory parameters. The key parameter called &amp;quot;handler&amp;quot; gets&lt;br /&gt;
invoked every time there is an incoming request, it accepts the request and returns&lt;br /&gt;
a response.&lt;br /&gt;
&lt;br /&gt;
In 2016, it upgraded from PyWPS 3 to PyWPS 4. Some of the more significant&lt;br /&gt;
changes include every input being considered a list of inputs and all inputs having&lt;br /&gt;
file, data and stream attributes. These attributes allow better manipulation&lt;br /&gt;
with data.&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&lt;br /&gt;
Python is a high-level programming language that fully supports object-oriented and&lt;br /&gt;
structured programming. Developed in the late 1980s, the first version 0.9.0 was&lt;br /&gt;
released in 1991. In 2008, Python 3.0 was released. Currently, the most up-to-date&lt;br /&gt;
version available is 3.6.&lt;br /&gt;
It was designed as a syntactically simple language, using whitespace intendantion&lt;br /&gt;
instead of brackets and English words rather than punctuation. It is a dynamicallytyped&lt;br /&gt;
language, which means it is not neccessary to specify a data-type when defining&lt;br /&gt;
a variable. For its simplicity and readability, Python is often considered a good&lt;br /&gt;
first programming language to learn.&lt;br /&gt;
One of the key advantages of Python is its high extensibility. It provides large&lt;br /&gt;
standard libraries and also an extensive number of other modules, packages and&lt;br /&gt;
libraries, so most of the common programming tasks are already solved, scripted&lt;br /&gt;
and made available.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Dates !! Task !! Deliverables&lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period (April, 23 - May, 14) ||&lt;br /&gt;
Initial research on GDAL, MapServer, SQLAlchemy, GeoAlchemy, relational databases (PostgreSQL, Oracle, Microsoft SQL Server, MySQL, SQLite,...) &lt;br /&gt;
&lt;br /&gt;
Select which databases will be supported in this project.&lt;br /&gt;
&lt;br /&gt;
Set up environment for work - virtual environment with a distribution of Linux, instances of selected database management systems for testing. &lt;br /&gt;
| [https://docs.google.com/document/d/1DzdT0bcAmeU4EsoZlg8jBZmcfx6mIPe4Z8PRwsWzP_U/edit#heading=h.9dmblslll4ai Bonding Period Report]&lt;br /&gt;
|-&lt;br /&gt;
| Week 1 (May, 14 - May, 20) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Define “DbStorage”, an abstract base class that will ensure derived classes implement particular methods from this class. Define abstract methods that are necessary for writing output data to a remote database.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 2 (May, 21 - May, 27) ||&lt;br /&gt;
&lt;br /&gt;
Write test script that checks “PgStorage” will work correctly and write output vector data to a PostgreSQL database.&lt;br /&gt;
&lt;br /&gt;
Develop “PgStorage“ class that inherits from “DbStorage” and implements proposed functionality.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 3 (May, 28 - June, 3) ||&lt;br /&gt;
&lt;br /&gt;
Write a test (or update test written in the previous week) to ensure correct functionality of newly developed classes.&lt;br /&gt;
&lt;br /&gt;
Develop several classes based on selection in week 1 – e.g. “MSSQLStorage”, “OCIStorage”, “MySQLStorage”, etc.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 4 (June, 4 - June, 10) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Develop a mechanism for handling raster output data and implement it in the above-mentioned classes. If GDAL does not support writing raster data to a specific database by default, appropriate tool or library must be identified. For example, for writing raster data into PostgreSQL, ”raster2pgsql“ tool can be used.&lt;br /&gt;
&lt;br /&gt;
Decide how other types of data (such as string, table, CSV, etc.) will be handled and implement it.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 5 (June, 11 - June, 15) Phase 1 Evaluation||&lt;br /&gt;
&lt;br /&gt;
Write a test that checks all data types will get correctly stored in database.&lt;br /&gt;
&lt;br /&gt;
Write and submit weekly report.&lt;br /&gt;
&lt;br /&gt;
Write and submit Phase 1 evaluation.&lt;br /&gt;
&lt;br /&gt;
'''Deliverables for Phase 1:''' Correctly functioning and tested module that enables output data (vector, raster or other) to be stored in one of several database management systems.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 6 (June, 16 - June, 24) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Handle metadata. Currently, logs with information about run processes (such as when a process started and finished) are stored in a SQLite database. Implement a functionality that accesses logs, extracts desired metadata from them and saves them in the same database as output data. Use unique identifier of every process to join metadata (using primary key) with the corresponding output data (foreign key). For each run process, include expiration date to its output data.&lt;br /&gt;
&lt;br /&gt;
Develop a trigger that removes output data when it expires.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 7 (June, 25 - July, 1) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Establish a connection between database and MapServer and allow MapServer to access output data stored in database.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 8 (July, 2 - July, 8) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable output data to be viewed as WMS services through MapServer.&lt;br /&gt;
&lt;br /&gt;
Edit current code so the reference embodied in the responding document is a URL link to a running MapServer service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 9 (July, 9 - July, 13) Phase 2 Evaluation||&lt;br /&gt;
&lt;br /&gt;
Write and submit Phase 2 evaluation.&lt;br /&gt;
&lt;br /&gt;
'''Deliverables for Phase 2''': Correctly functioning and tested module that enables output data to be viewed as a Web Map Service using MapServer.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 10 (July, 14 - July, 22) ||&lt;br /&gt;
&lt;br /&gt;
Update previously developed test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable raster output data to be accessed and/or edited as OGC Web Coverage Service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 11 (July, 23 - July, 29) ||&lt;br /&gt;
&lt;br /&gt;
Update previously developed test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable vector output data to be accessed and/or edited as OGC Web Feature Service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 12 (July, 30 - August, 5) ||&lt;br /&gt;
&lt;br /&gt;
Write a test that ensures newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Develop a demo that demonstrates implemented functionality.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 13 (August, 6 - August, 14)&lt;br /&gt;
&lt;br /&gt;
||Create documentation that can be added to the current PyWPS documentation.&lt;br /&gt;
&lt;br /&gt;
Finalize work, clean code and prepare a pull request(s) to PyWPS GitHub repository.&lt;br /&gt;
&lt;br /&gt;
Write and submit final report.&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Reports ==&lt;br /&gt;
=== Bonding Period ===&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/document/d/1DzdT0bcAmeU4EsoZlg8jBZmcfx6mIPe4Z8PRwsWzP_U/edit#heading=h.9dmblslll4ai Bonding Period Report]&lt;br /&gt;
&lt;br /&gt;
=== Week 1===&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
I defined the first version of “DbStorage”, a class that will allow output data to be stored in one of RDBMSs supported (PostGIS, MS Server, Oracle spatial, SpatiaLite) [1]&lt;br /&gt;
I downloaded PostgreSQL and PostGIS and run it locally on my computer. I tested it functions correctly by using code I had written previously to GSoC [2] that stores output data in PostGIS. I run some of PyWPS test processes and checked output data does get stored in PostGIS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
Implement PGStorage, a class within the DbStorage class that will store output data to PostGIS and returns database name, schema and table as a reference to the client. &lt;br /&gt;
Start working on implementing MSServerStorage, OciStorage and SpatiaLiteStorage.&lt;br /&gt;
Download, run and test SpatiaLite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/45b98e04c428c2e62643a42bbebfedf8efc0603e&lt;br /&gt;
&lt;br /&gt;
[2] https://github.com/ctu-geoforall-lab-projects/bp-pisl-2018-pywps/commit/c364be4888d74b2285e5a348afc6c3fe184fbc64&lt;br /&gt;
&lt;br /&gt;
=== Week 2===&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
Develop and implement PGStorage, a class within the DbStorage class that will store output data to PostGIS and returns database name, schema and table as a reference to the client.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Study materials on Factory design pattern [2] recommended by my mentor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Download, run and test SpatiaLite. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
Develop, implement and test _MSSQLStorage and _OciStorage _MySQLStorage classes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
I have some questions related to work I will be doing next week. I will consult with my mentor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/254b1e5697c0b4781544a6329b52eb4688e60a22&lt;br /&gt;
&lt;br /&gt;
[2]  http://python-3-patterns-idioms-test.readthedocs.io/en/latest/Factory.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Week 3 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Following my mentor's advice, I made a decision that _MSSQLStorage,  _OciStorage _MySQLStorage classes will not be implemented at this stage. There will only be PgStorage and SQLiteStorage that store data in a PostgreSQL and SQLite databases, respectively &lt;br /&gt;
&lt;br /&gt;
- Define DbStorageAbstract, an abstract class from which PgStorage and SQLiteStorage will inherit [1]&lt;br /&gt;
&lt;br /&gt;
- Develop and implement SQLiteStorage [2] &lt;br /&gt;
&lt;br /&gt;
- Fix/Update DbStorage class [3] &lt;br /&gt;
&lt;br /&gt;
- Update outputs.py so complex output data is either stored as files or in a database depending on configuration [4]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Develop a mechanism for handling raster output data and implement it.&lt;br /&gt;
&lt;br /&gt;
- Decide how other types of data (such as string, table, CSV, etc.) will be handled and implement it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
There is an error occuring when I run PyWPS and I haven't been able to find out what is causing it. I will discuss this with my mentor on a call on Monday morning.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/89ab12a2fd883a0df6c070a4ca573f89b6c31a5a&lt;br /&gt;
&lt;br /&gt;
[2]  https://github.com/janpisl/pywps/commit/864d275fe8c47e41c07f8278b8037e80a0b0b838&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/commit/c0d698cefde9a5085cd7d76bb0e32156a6391880 &lt;br /&gt;
&lt;br /&gt;
[4] https://github.com/janpisl/pywps/commit/7f00fa06ac5fd7823d79a363f6163dcc38e7bbb0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Week 4 === &lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
-I changed the structure of the code. Classes PgStorage and SQLiteStorage are now stored in separate files in the db folder. FileStorage is in a separate file, too. Rest of the code is in the __init__ files. [1]&lt;br /&gt;
&lt;br /&gt;
- I added the data_type attribute to inout/formats/__init__.py. At the moment, allowed values are either vector or raster using the enum module. This was done so when storing output data it can be differed between raster and vector data and appropriate method can be used. [2]&lt;br /&gt;
&lt;br /&gt;
- The Dbstorage class has been simplified. Instead of creating an instance of the class in outputs.py and calling the get_db_type method in the constructor, get_db_type is now a static method and gets called directly in outputs.py [3]&lt;br /&gt;
&lt;br /&gt;
- PgStorage accesses the data_type value and calls appropriate method (store_vector_output or store_raster_output) [4]&lt;br /&gt;
&lt;br /&gt;
- I implemented the store_raster_output method in the PgStorage class [5]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Implement store_raster_output for SQLiteStorage&lt;br /&gt;
&lt;br /&gt;
- Implement another method for storing other types of data (string, CSV, etc.)&lt;br /&gt;
&lt;br /&gt;
- Write a script that tests whether different data types get stored correctly&lt;br /&gt;
&lt;br /&gt;
- Submit the Phase 1 evaluation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/18c46864ff75fb01e3c7d76f3f4a1b6d2457a22f[[2]  https://github.com/janpisl/pywps/commit/4bb079bfcde0b4fcc42393f531e86c47a91507d4&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/commit/80c61c92e183c06af741fe94d0b172f9a5940609&lt;br /&gt;
&lt;br /&gt;
[4] https://github.com/janpisl/pywps/commit/e024b1e5d1eb8df1a79989a59b14276b2757d98d&lt;br /&gt;
&lt;br /&gt;
[5] https://github.com/janpisl/pywps/commit/a09dfc61729b36eb81ddd0d9adb5bda2effe3029&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Week 5=== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
- I updated the store_vector_output method in the SQLite class [1]&lt;br /&gt;
&lt;br /&gt;
- I implemented a method for storing raster outputs in SQLite [2]&lt;br /&gt;
&lt;br /&gt;
- I implemented a method for storing output data of other datatypes in PostgreSQL [3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Write test_storage, a unit test that would test all storage options and their correct functionality&lt;br /&gt;
&lt;br /&gt;
- Handle metadata&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/44e9130c8bbb73841c51a09266a9db62ff2809f9&lt;br /&gt;
&lt;br /&gt;
[2]  https://github.com/janpisl/pywps/commit/5bf8eb883343f0caacd47470bf79152ac751d480&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/commit/50cd11ffa2486ee3de7cac3340874179d81d4e2e&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Week 6 === &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
''' &lt;br /&gt;
&lt;br /&gt;
- Database schema gets created automatically when the DbStorage class is initialized. [1]&lt;br /&gt;
&lt;br /&gt;
- I developed &amp;quot;test_storage&amp;quot; module for testing storing output data [2]&lt;br /&gt;
&lt;br /&gt;
- I implemented unittest classes for testing file storage [3], PostgreSQL storage [4] [5] [6] and SQLite [7] [8]&lt;br /&gt;
&lt;br /&gt;
- Some other minor changes and updates to the code and fixing bugs [9]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Address issues revealed by testing&lt;br /&gt;
&lt;br /&gt;
- Handle metadata&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/524d65f2cb5cdfe5f0bbdf769a9850c32886952e&lt;br /&gt;
&lt;br /&gt;
[2]  https://github.com/janpisl/pywps/commit/1c36dd1ee3b1c61d819b92f5a195792f488b1193&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/commit/2896d7670ed2f38470eab54790ed2e822c42583d&lt;br /&gt;
&lt;br /&gt;
[4] https://github.com/janpisl/pywps/commit/97c8255a9ea3ad52a022d84315eb4e725afe4fc6&lt;br /&gt;
&lt;br /&gt;
[5] https://github.com/janpisl/pywps/commit/16afbea95f1fea31dd3ac9e7a30d63b5d309ad12&lt;br /&gt;
&lt;br /&gt;
[6] https://github.com/janpisl/pywps/commit/b08dee2644888379d08c25919d112b0e29f2423d&lt;br /&gt;
&lt;br /&gt;
[7] https://github.com/janpisl/pywps/commit/c406e21d8ee844e468fe672d236285664a8fde76&lt;br /&gt;
&lt;br /&gt;
[8] https://github.com/janpisl/pywps/commit/a1493e70024d06b3d29d1522edca64af4574de0b&lt;br /&gt;
&lt;br /&gt;
[9] https://github.com/janpisl/pywps/commits/master&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Week 8=== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
- PgStorage and SQLiteStorage classes inherit from DbStorage [1]&lt;br /&gt;
&lt;br /&gt;
- The &amp;quot;store&amp;quot; method is now implemented in the parent class DbStorage&lt;br /&gt;
&lt;br /&gt;
- Method for storing vector outputs is now implemented in the parent class DbStorage [2]&lt;br /&gt;
&lt;br /&gt;
- Method for storing outputs such as CSV, plain text, etc. is now implemented in the parent class DbStorage [3]&lt;br /&gt;
&lt;br /&gt;
- Each class inheriting from DbStorage now implements a method for initializating database (create schema, etc.) [4]&lt;br /&gt;
&lt;br /&gt;
- Fixing bugs and some other minor changes and updates to the code [5]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Download, compile and run MapServer&lt;br /&gt;
&lt;br /&gt;
- Establish a connection between MapServer and PostgreSQL&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/889ce577747815554970c3c39cebed15fe1d1ca6&lt;br /&gt;
&lt;br /&gt;
[2] https://github.com/janpisl/pywps/commit/68d193aed029e4c6c4d6e8ec73ac44de8c183b71&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/commit/341f8a8eb8d99663e15796e373c5bf78fc9364a6&lt;br /&gt;
&lt;br /&gt;
[4] https://github.com/janpisl/pywps/commit/321d6d8d6caf28131062134a5188eaa61c3e4b38&lt;br /&gt;
&lt;br /&gt;
[5] https://github.com/janpisl/pywps/commits/master&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Week 9=== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
- Together with my mentor we decided not to implement a functionality for handling metadata at this time.&lt;br /&gt;
&lt;br /&gt;
- I established a connection between PostgreSQL and SQLite and Mapserver [1]. This allows sample output data to be served as a WMS service and viewed in e.g. QGIS.&lt;br /&gt;
&lt;br /&gt;
- I created sample requests for both PostgreSQL and SQLite [2]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Edit current code and automatize connection with MapServer so any output data can be viewed as a WMS service.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/d88106eecfa08c30b945a6105f2eeaf978bfda8a&lt;br /&gt;
&lt;br /&gt;
[2] https://github.com/janpisl/pywps/commit/b50360d42f48ac8c99df1af005cbdf3951692465&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Google Summer of Code]]&lt;/div&gt;</summary>
		<author><name>Wiki-Janpisl</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Database_Output_Storage_for_PyWPS&amp;diff=115689</id>
		<title>Database Output Storage for PyWPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Database_Output_Storage_for_PyWPS&amp;diff=115689"/>
		<updated>2018-07-15T20:23:06Z</updated>

		<summary type="html">&lt;p&gt;Wiki-Janpisl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
My name is Jan Pisl and I study at the Czech Technical University in Prague. I will be participating in this year's GSoC. My project’s aim is to develop database storage support for PyWPS that would allow output data to be stored in a database in a way that is compliant with the OGC WPS Standard. I will be using Python 3.6. &lt;br /&gt;
&lt;br /&gt;
== Project ==&lt;br /&gt;
Title: Database Output Storage for PyWPS&lt;br /&gt;
&lt;br /&gt;
Student: Jan Pišl&lt;br /&gt;
&lt;br /&gt;
Mentors: [[User:Jachym|Jáchym Čepický]], [[User:Martinl|Martin Landa]].&lt;br /&gt;
&lt;br /&gt;
Project's repositories: [https://github.com/janpisl/pywps GitHub repository], [https://summerofcode.withgoogle.com/projects/#5084513521106944 Project's page on GSoC website] &lt;br /&gt;
&lt;br /&gt;
== Technology ==&lt;br /&gt;
&lt;br /&gt;
=== PyWPS ===&lt;br /&gt;
PyWPS is a server side implementation of the OGC Web Processing Service (OGC&lt;br /&gt;
WPS) standards 1.0.0. It is written in the Python programming language, it runs&lt;br /&gt;
on Python 2.7, 3.3 or higher and it is tested and developed on Linux. It uses&lt;br /&gt;
a ConfigParser format for configuration files. It supports a variety of geospatial&lt;br /&gt;
software and tools such as GRASS GIS, R Project or the GDAL library. Synchronous&lt;br /&gt;
and asynchronuous invocations are supported. As for request encoding, two options&lt;br /&gt;
are available - key-value pairs (using HTTP-GET) or XML payload (using HTTPPOST).&lt;br /&gt;
Every process that is to be deployed on the server is defined as a class&lt;br /&gt;
and has several mandatory parameters. The key parameter called &amp;quot;handler&amp;quot; gets&lt;br /&gt;
invoked every time there is an incoming request, it accepts the request and returns&lt;br /&gt;
a response.&lt;br /&gt;
&lt;br /&gt;
In 2016, it upgraded from PyWPS 3 to PyWPS 4. Some of the more significant&lt;br /&gt;
changes include every input being considered a list of inputs and all inputs having&lt;br /&gt;
file, data and stream attributes. These attributes allow better manipulation&lt;br /&gt;
with data.&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&lt;br /&gt;
Python is a high-level programming language that fully supports object-oriented and&lt;br /&gt;
structured programming. Developed in the late 1980s, the first version 0.9.0 was&lt;br /&gt;
released in 1991. In 2008, Python 3.0 was released. Currently, the most up-to-date&lt;br /&gt;
version available is 3.6.&lt;br /&gt;
It was designed as a syntactically simple language, using whitespace intendantion&lt;br /&gt;
instead of brackets and English words rather than punctuation. It is a dynamicallytyped&lt;br /&gt;
language, which means it is not neccessary to specify a data-type when defining&lt;br /&gt;
a variable. For its simplicity and readability, Python is often considered a good&lt;br /&gt;
first programming language to learn.&lt;br /&gt;
One of the key advantages of Python is its high extensibility. It provides large&lt;br /&gt;
standard libraries and also an extensive number of other modules, packages and&lt;br /&gt;
libraries, so most of the common programming tasks are already solved, scripted&lt;br /&gt;
and made available.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Dates !! Task !! Deliverables&lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period (April, 23 - May, 14) ||&lt;br /&gt;
Initial research on GDAL, MapServer, SQLAlchemy, GeoAlchemy, relational databases (PostgreSQL, Oracle, Microsoft SQL Server, MySQL, SQLite,...) &lt;br /&gt;
&lt;br /&gt;
Select which databases will be supported in this project.&lt;br /&gt;
&lt;br /&gt;
Set up environment for work - virtual environment with a distribution of Linux, instances of selected database management systems for testing. &lt;br /&gt;
| [https://docs.google.com/document/d/1DzdT0bcAmeU4EsoZlg8jBZmcfx6mIPe4Z8PRwsWzP_U/edit#heading=h.9dmblslll4ai Bonding Period Report]&lt;br /&gt;
|-&lt;br /&gt;
| Week 1 (May, 14 - May, 20) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Define “DbStorage”, an abstract base class that will ensure derived classes implement particular methods from this class. Define abstract methods that are necessary for writing output data to a remote database.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 2 (May, 21 - May, 27) ||&lt;br /&gt;
&lt;br /&gt;
Write test script that checks “PgStorage” will work correctly and write output vector data to a PostgreSQL database.&lt;br /&gt;
&lt;br /&gt;
Develop “PgStorage“ class that inherits from “DbStorage” and implements proposed functionality.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 3 (May, 28 - June, 3) ||&lt;br /&gt;
&lt;br /&gt;
Write a test (or update test written in the previous week) to ensure correct functionality of newly developed classes.&lt;br /&gt;
&lt;br /&gt;
Develop several classes based on selection in week 1 – e.g. “MSSQLStorage”, “OCIStorage”, “MySQLStorage”, etc.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 4 (June, 4 - June, 10) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Develop a mechanism for handling raster output data and implement it in the above-mentioned classes. If GDAL does not support writing raster data to a specific database by default, appropriate tool or library must be identified. For example, for writing raster data into PostgreSQL, ”raster2pgsql“ tool can be used.&lt;br /&gt;
&lt;br /&gt;
Decide how other types of data (such as string, table, CSV, etc.) will be handled and implement it.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 5 (June, 11 - June, 15) Phase 1 Evaluation||&lt;br /&gt;
&lt;br /&gt;
Write a test that checks all data types will get correctly stored in database.&lt;br /&gt;
&lt;br /&gt;
Write and submit weekly report.&lt;br /&gt;
&lt;br /&gt;
Write and submit Phase 1 evaluation.&lt;br /&gt;
&lt;br /&gt;
'''Deliverables for Phase 1:''' Correctly functioning and tested module that enables output data (vector, raster or other) to be stored in one of several database management systems.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 6 (June, 16 - June, 24) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Handle metadata. Currently, logs with information about run processes (such as when a process started and finished) are stored in a SQLite database. Implement a functionality that accesses logs, extracts desired metadata from them and saves them in the same database as output data. Use unique identifier of every process to join metadata (using primary key) with the corresponding output data (foreign key). For each run process, include expiration date to its output data.&lt;br /&gt;
&lt;br /&gt;
Develop a trigger that removes output data when it expires.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 7 (June, 25 - July, 1) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Establish a connection between database and MapServer and allow MapServer to access output data stored in database.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 8 (July, 2 - July, 8) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable output data to be viewed as WMS services through MapServer.&lt;br /&gt;
&lt;br /&gt;
Edit current code so the reference embodied in the responding document is a URL link to a running MapServer service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 9 (July, 9 - July, 13) Phase 2 Evaluation||&lt;br /&gt;
&lt;br /&gt;
Write and submit Phase 2 evaluation.&lt;br /&gt;
&lt;br /&gt;
'''Deliverables for Phase 2''': Correctly functioning and tested module that enables output data to be viewed as a Web Map Service using MapServer.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 10 (July, 14 - July, 22) ||&lt;br /&gt;
&lt;br /&gt;
Update previously developed test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable raster output data to be accessed and/or edited as OGC Web Coverage Service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 11 (July, 23 - July, 29) ||&lt;br /&gt;
&lt;br /&gt;
Update previously developed test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable vector output data to be accessed and/or edited as OGC Web Feature Service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 12 (July, 30 - August, 5) ||&lt;br /&gt;
&lt;br /&gt;
Write a test that ensures newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Develop a demo that demonstrates implemented functionality.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 13 (August, 6 - August, 14)&lt;br /&gt;
&lt;br /&gt;
||Create documentation that can be added to the current PyWPS documentation.&lt;br /&gt;
&lt;br /&gt;
Finalize work, clean code and prepare a pull request(s) to PyWPS GitHub repository.&lt;br /&gt;
&lt;br /&gt;
Write and submit final report.&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Reports ==&lt;br /&gt;
=== Bonding Period ===&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/document/d/1DzdT0bcAmeU4EsoZlg8jBZmcfx6mIPe4Z8PRwsWzP_U/edit#heading=h.9dmblslll4ai Bonding Period Report]&lt;br /&gt;
&lt;br /&gt;
=== Week 1===&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
I defined the first version of “DbStorage”, a class that will allow output data to be stored in one of RDBMSs supported (PostGIS, MS Server, Oracle spatial, SpatiaLite) [1]&lt;br /&gt;
I downloaded PostgreSQL and PostGIS and run it locally on my computer. I tested it functions correctly by using code I had written previously to GSoC [2] that stores output data in PostGIS. I run some of PyWPS test processes and checked output data does get stored in PostGIS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
Implement PGStorage, a class within the DbStorage class that will store output data to PostGIS and returns database name, schema and table as a reference to the client. &lt;br /&gt;
Start working on implementing MSServerStorage, OciStorage and SpatiaLiteStorage.&lt;br /&gt;
Download, run and test SpatiaLite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/45b98e04c428c2e62643a42bbebfedf8efc0603e&lt;br /&gt;
&lt;br /&gt;
[2] https://github.com/ctu-geoforall-lab-projects/bp-pisl-2018-pywps/commit/c364be4888d74b2285e5a348afc6c3fe184fbc64&lt;br /&gt;
&lt;br /&gt;
=== Week 2===&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
Develop and implement PGStorage, a class within the DbStorage class that will store output data to PostGIS and returns database name, schema and table as a reference to the client.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Study materials on Factory design pattern [2] recommended by my mentor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Download, run and test SpatiaLite. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
Develop, implement and test _MSSQLStorage and _OciStorage _MySQLStorage classes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
I have some questions related to work I will be doing next week. I will consult with my mentor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/254b1e5697c0b4781544a6329b52eb4688e60a22&lt;br /&gt;
&lt;br /&gt;
[2]  http://python-3-patterns-idioms-test.readthedocs.io/en/latest/Factory.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Week 3 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Following my mentor's advice, I made a decision that _MSSQLStorage,  _OciStorage _MySQLStorage classes will not be implemented at this stage. There will only be PgStorage and SQLiteStorage that store data in a PostgreSQL and SQLite databases, respectively &lt;br /&gt;
&lt;br /&gt;
- Define DbStorageAbstract, an abstract class from which PgStorage and SQLiteStorage will inherit [1]&lt;br /&gt;
&lt;br /&gt;
- Develop and implement SQLiteStorage [2] &lt;br /&gt;
&lt;br /&gt;
- Fix/Update DbStorage class [3] &lt;br /&gt;
&lt;br /&gt;
- Update outputs.py so complex output data is either stored as files or in a database depending on configuration [4]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Develop a mechanism for handling raster output data and implement it.&lt;br /&gt;
&lt;br /&gt;
- Decide how other types of data (such as string, table, CSV, etc.) will be handled and implement it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
There is an error occuring when I run PyWPS and I haven't been able to find out what is causing it. I will discuss this with my mentor on a call on Monday morning.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/89ab12a2fd883a0df6c070a4ca573f89b6c31a5a&lt;br /&gt;
&lt;br /&gt;
[2]  https://github.com/janpisl/pywps/commit/864d275fe8c47e41c07f8278b8037e80a0b0b838&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/commit/c0d698cefde9a5085cd7d76bb0e32156a6391880 &lt;br /&gt;
&lt;br /&gt;
[4] https://github.com/janpisl/pywps/commit/7f00fa06ac5fd7823d79a363f6163dcc38e7bbb0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Week 4 === &lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
-I changed the structure of the code. Classes PgStorage and SQLiteStorage are now stored in separate files in the db folder. FileStorage is in a separate file, too. Rest of the code is in the __init__ files. [1]&lt;br /&gt;
&lt;br /&gt;
- I added the data_type attribute to inout/formats/__init__.py. At the moment, allowed values are either vector or raster using the enum module. This was done so when storing output data it can be differed between raster and vector data and appropriate method can be used. [2]&lt;br /&gt;
&lt;br /&gt;
- The Dbstorage class has been simplified. Instead of creating an instance of the class in outputs.py and calling the get_db_type method in the constructor, get_db_type is now a static method and gets called directly in outputs.py [3]&lt;br /&gt;
&lt;br /&gt;
- PgStorage accesses the data_type value and calls appropriate method (store_vector_output or store_raster_output) [4]&lt;br /&gt;
&lt;br /&gt;
- I implemented the store_raster_output method in the PgStorage class [5]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Implement store_raster_output for SQLiteStorage&lt;br /&gt;
&lt;br /&gt;
- Implement another method for storing other types of data (string, CSV, etc.)&lt;br /&gt;
&lt;br /&gt;
- Write a script that tests whether different data types get stored correctly&lt;br /&gt;
&lt;br /&gt;
- Submit the Phase 1 evaluation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/18c46864ff75fb01e3c7d76f3f4a1b6d2457a22f[[2]  https://github.com/janpisl/pywps/commit/4bb079bfcde0b4fcc42393f531e86c47a91507d4&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/commit/80c61c92e183c06af741fe94d0b172f9a5940609&lt;br /&gt;
&lt;br /&gt;
[4] https://github.com/janpisl/pywps/commit/e024b1e5d1eb8df1a79989a59b14276b2757d98d&lt;br /&gt;
&lt;br /&gt;
[5] https://github.com/janpisl/pywps/commit/a09dfc61729b36eb81ddd0d9adb5bda2effe3029&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Week 5=== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
- I updated the store_vector_output method in the SQLite class [1]&lt;br /&gt;
&lt;br /&gt;
- I implemented a method for storing raster outputs in SQLite [2]&lt;br /&gt;
&lt;br /&gt;
- I implemented a method for storing output data of other datatypes in PostgreSQL [3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Write test_storage, a unit test that would test all storage options and their correct functionality&lt;br /&gt;
&lt;br /&gt;
- Handle metadata&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/44e9130c8bbb73841c51a09266a9db62ff2809f9&lt;br /&gt;
&lt;br /&gt;
[2]  https://github.com/janpisl/pywps/commit/5bf8eb883343f0caacd47470bf79152ac751d480&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/commit/50cd11ffa2486ee3de7cac3340874179d81d4e2e&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Week 6 === &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
''' &lt;br /&gt;
&lt;br /&gt;
- Database schema gets created automatically when the DbStorage class is initialized. [1]&lt;br /&gt;
&lt;br /&gt;
- I developed &amp;quot;test_storage&amp;quot; module for testing storing output data [2]&lt;br /&gt;
&lt;br /&gt;
- I implemented unittest classes for testing file storage [3], PostgreSQL storage [4] [5] [6] and SQLite [7] [8]&lt;br /&gt;
&lt;br /&gt;
- Some other minor changes and updates to the code and fixing bugs [9]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Address issues revealed by testing&lt;br /&gt;
&lt;br /&gt;
- Handle metadata&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/524d65f2cb5cdfe5f0bbdf769a9850c32886952e&lt;br /&gt;
&lt;br /&gt;
[2]  https://github.com/janpisl/pywps/commit/1c36dd1ee3b1c61d819b92f5a195792f488b1193&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/commit/2896d7670ed2f38470eab54790ed2e822c42583d&lt;br /&gt;
&lt;br /&gt;
[4] https://github.com/janpisl/pywps/commit/97c8255a9ea3ad52a022d84315eb4e725afe4fc6&lt;br /&gt;
&lt;br /&gt;
[5] https://github.com/janpisl/pywps/commit/16afbea95f1fea31dd3ac9e7a30d63b5d309ad12&lt;br /&gt;
&lt;br /&gt;
[6] https://github.com/janpisl/pywps/commit/b08dee2644888379d08c25919d112b0e29f2423d&lt;br /&gt;
&lt;br /&gt;
[7] https://github.com/janpisl/pywps/commit/c406e21d8ee844e468fe672d236285664a8fde76&lt;br /&gt;
&lt;br /&gt;
[8] https://github.com/janpisl/pywps/commit/a1493e70024d06b3d29d1522edca64af4574de0b&lt;br /&gt;
&lt;br /&gt;
[9] https://github.com/janpisl/pywps/commits/master&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Week 8 reportú=== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
- PgStorage and SQLiteStorage classes inherit from DbStorage [1]&lt;br /&gt;
&lt;br /&gt;
- The &amp;quot;store&amp;quot; method is now implemented in the parent class DbStorage&lt;br /&gt;
&lt;br /&gt;
- Method for storing vector outputs is now implemented in the parent class DbStorage [2]&lt;br /&gt;
&lt;br /&gt;
- Method for storing outputs such as CSV, plain text, etc. is now implemented in the parent class DbStorage [3]&lt;br /&gt;
&lt;br /&gt;
- Each class inheriting from DbStorage now implements a method for initializating database (create schema, etc.) [4]&lt;br /&gt;
&lt;br /&gt;
- Fixing bugs and some other minor changes and updates to the code [5]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Download, compile and run MapServer&lt;br /&gt;
&lt;br /&gt;
- Establish a connection between MapServer and PostgreSQL&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/889ce577747815554970c3c39cebed15fe1d1ca6&lt;br /&gt;
&lt;br /&gt;
[2] https://github.com/janpisl/pywps/commit/68d193aed029e4c6c4d6e8ec73ac44de8c183b71&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/commit/341f8a8eb8d99663e15796e373c5bf78fc9364a6&lt;br /&gt;
&lt;br /&gt;
[4] https://github.com/janpisl/pywps/commit/321d6d8d6caf28131062134a5188eaa61c3e4b38&lt;br /&gt;
&lt;br /&gt;
[5] https://github.com/janpisl/pywps/commits/master&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Week 9 report=== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
- Together with my mentor we decided not to implement a functionality for handling metadata at this time.&lt;br /&gt;
&lt;br /&gt;
- I established a connection between PostgreSQL and SQLite and Mapserver [1]. This allows sample output data to be served as a WMS service and viewed in e.g. QGIS.&lt;br /&gt;
&lt;br /&gt;
- I created sample requests for both PostgreSQL and SQLite [2]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Edit current code and automatize connection with MapServer so any output data can be viewed as a WMS service.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/d88106eecfa08c30b945a6105f2eeaf978bfda8a&lt;br /&gt;
&lt;br /&gt;
[2] https://github.com/janpisl/pywps/commit/b50360d42f48ac8c99df1af005cbdf3951692465&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Google Summer of Code]]&lt;/div&gt;</summary>
		<author><name>Wiki-Janpisl</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Database_Output_Storage_for_PyWPS&amp;diff=115636</id>
		<title>Database Output Storage for PyWPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Database_Output_Storage_for_PyWPS&amp;diff=115636"/>
		<updated>2018-07-08T15:05:20Z</updated>

		<summary type="html">&lt;p&gt;Wiki-Janpisl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
My name is Jan Pisl and I study at the Czech Technical University in Prague. I will be participating in this year's GSoC. My project’s aim is to develop database storage support for PyWPS that would allow output data to be stored in a database in a way that is compliant with the OGC WPS Standard. I will be using Python 3.6. &lt;br /&gt;
&lt;br /&gt;
== Project ==&lt;br /&gt;
Title: Database Output Storage for PyWPS&lt;br /&gt;
&lt;br /&gt;
Student: Jan Pišl&lt;br /&gt;
&lt;br /&gt;
Mentors: [[User:Jachym|Jáchym Čepický]], [[User:Martinl|Martin Landa]].&lt;br /&gt;
&lt;br /&gt;
Project's repositories: [https://github.com/janpisl/pywps GitHub repository], [https://summerofcode.withgoogle.com/projects/#5084513521106944 Project's page on GSoC website] &lt;br /&gt;
&lt;br /&gt;
== Technology ==&lt;br /&gt;
&lt;br /&gt;
=== PyWPS ===&lt;br /&gt;
PyWPS is a server side implementation of the OGC Web Processing Service (OGC&lt;br /&gt;
WPS) standards 1.0.0. It is written in the Python programming language, it runs&lt;br /&gt;
on Python 2.7, 3.3 or higher and it is tested and developed on Linux. It uses&lt;br /&gt;
a ConfigParser format for configuration files. It supports a variety of geospatial&lt;br /&gt;
software and tools such as GRASS GIS, R Project or the GDAL library. Synchronous&lt;br /&gt;
and asynchronuous invocations are supported. As for request encoding, two options&lt;br /&gt;
are available - key-value pairs (using HTTP-GET) or XML payload (using HTTPPOST).&lt;br /&gt;
Every process that is to be deployed on the server is defined as a class&lt;br /&gt;
and has several mandatory parameters. The key parameter called &amp;quot;handler&amp;quot; gets&lt;br /&gt;
invoked every time there is an incoming request, it accepts the request and returns&lt;br /&gt;
a response.&lt;br /&gt;
&lt;br /&gt;
In 2016, it upgraded from PyWPS 3 to PyWPS 4. Some of the more significant&lt;br /&gt;
changes include every input being considered a list of inputs and all inputs having&lt;br /&gt;
file, data and stream attributes. These attributes allow better manipulation&lt;br /&gt;
with data.&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&lt;br /&gt;
Python is a high-level programming language that fully supports object-oriented and&lt;br /&gt;
structured programming. Developed in the late 1980s, the first version 0.9.0 was&lt;br /&gt;
released in 1991. In 2008, Python 3.0 was released. Currently, the most up-to-date&lt;br /&gt;
version available is 3.6.&lt;br /&gt;
It was designed as a syntactically simple language, using whitespace intendantion&lt;br /&gt;
instead of brackets and English words rather than punctuation. It is a dynamicallytyped&lt;br /&gt;
language, which means it is not neccessary to specify a data-type when defining&lt;br /&gt;
a variable. For its simplicity and readability, Python is often considered a good&lt;br /&gt;
first programming language to learn.&lt;br /&gt;
One of the key advantages of Python is its high extensibility. It provides large&lt;br /&gt;
standard libraries and also an extensive number of other modules, packages and&lt;br /&gt;
libraries, so most of the common programming tasks are already solved, scripted&lt;br /&gt;
and made available.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Dates !! Task !! Deliverables&lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period (April, 23 - May, 14) ||&lt;br /&gt;
Initial research on GDAL, MapServer, SQLAlchemy, GeoAlchemy, relational databases (PostgreSQL, Oracle, Microsoft SQL Server, MySQL, SQLite,...) &lt;br /&gt;
&lt;br /&gt;
Select which databases will be supported in this project.&lt;br /&gt;
&lt;br /&gt;
Set up environment for work - virtual environment with a distribution of Linux, instances of selected database management systems for testing. &lt;br /&gt;
| [https://docs.google.com/document/d/1DzdT0bcAmeU4EsoZlg8jBZmcfx6mIPe4Z8PRwsWzP_U/edit#heading=h.9dmblslll4ai Bonding Period Report]&lt;br /&gt;
|-&lt;br /&gt;
| Week 1 (May, 14 - May, 20) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Define “DbStorage”, an abstract base class that will ensure derived classes implement particular methods from this class. Define abstract methods that are necessary for writing output data to a remote database.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 2 (May, 21 - May, 27) ||&lt;br /&gt;
&lt;br /&gt;
Write test script that checks “PgStorage” will work correctly and write output vector data to a PostgreSQL database.&lt;br /&gt;
&lt;br /&gt;
Develop “PgStorage“ class that inherits from “DbStorage” and implements proposed functionality.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 3 (May, 28 - June, 3) ||&lt;br /&gt;
&lt;br /&gt;
Write a test (or update test written in the previous week) to ensure correct functionality of newly developed classes.&lt;br /&gt;
&lt;br /&gt;
Develop several classes based on selection in week 1 – e.g. “MSSQLStorage”, “OCIStorage”, “MySQLStorage”, etc.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 4 (June, 4 - June, 10) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Develop a mechanism for handling raster output data and implement it in the above-mentioned classes. If GDAL does not support writing raster data to a specific database by default, appropriate tool or library must be identified. For example, for writing raster data into PostgreSQL, ”raster2pgsql“ tool can be used.&lt;br /&gt;
&lt;br /&gt;
Decide how other types of data (such as string, table, CSV, etc.) will be handled and implement it.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 5 (June, 11 - June, 15) Phase 1 Evaluation||&lt;br /&gt;
&lt;br /&gt;
Write a test that checks all data types will get correctly stored in database.&lt;br /&gt;
&lt;br /&gt;
Write and submit weekly report.&lt;br /&gt;
&lt;br /&gt;
Write and submit Phase 1 evaluation.&lt;br /&gt;
&lt;br /&gt;
'''Deliverables for Phase 1:''' Correctly functioning and tested module that enables output data (vector, raster or other) to be stored in one of several database management systems.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 6 (June, 16 - June, 24) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Handle metadata. Currently, logs with information about run processes (such as when a process started and finished) are stored in a SQLite database. Implement a functionality that accesses logs, extracts desired metadata from them and saves them in the same database as output data. Use unique identifier of every process to join metadata (using primary key) with the corresponding output data (foreign key). For each run process, include expiration date to its output data.&lt;br /&gt;
&lt;br /&gt;
Develop a trigger that removes output data when it expires.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 7 (June, 25 - July, 1) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Establish a connection between database and MapServer and allow MapServer to access output data stored in database.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 8 (July, 2 - July, 8) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable output data to be viewed as WMS services through MapServer.&lt;br /&gt;
&lt;br /&gt;
Edit current code so the reference embodied in the responding document is a URL link to a running MapServer service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 9 (July, 9 - July, 13) Phase 2 Evaluation||&lt;br /&gt;
&lt;br /&gt;
Write and submit Phase 2 evaluation.&lt;br /&gt;
&lt;br /&gt;
'''Deliverables for Phase 2''': Correctly functioning and tested module that enables output data to be viewed as a Web Map Service using MapServer.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 10 (July, 14 - July, 22) ||&lt;br /&gt;
&lt;br /&gt;
Update previously developed test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable raster output data to be accessed and/or edited as OGC Web Coverage Service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 11 (July, 23 - July, 29) ||&lt;br /&gt;
&lt;br /&gt;
Update previously developed test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable vector output data to be accessed and/or edited as OGC Web Feature Service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 12 (July, 30 - August, 5) ||&lt;br /&gt;
&lt;br /&gt;
Write a test that ensures newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Develop a demo that demonstrates implemented functionality.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 13 (August, 6 - August, 14)&lt;br /&gt;
&lt;br /&gt;
||Create documentation that can be added to the current PyWPS documentation.&lt;br /&gt;
&lt;br /&gt;
Finalize work, clean code and prepare a pull request(s) to PyWPS GitHub repository.&lt;br /&gt;
&lt;br /&gt;
Write and submit final report.&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Reports ==&lt;br /&gt;
=== Bonding Period ===&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/document/d/1DzdT0bcAmeU4EsoZlg8jBZmcfx6mIPe4Z8PRwsWzP_U/edit#heading=h.9dmblslll4ai Bonding Period Report]&lt;br /&gt;
&lt;br /&gt;
=== Week 1===&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
I defined the first version of “DbStorage”, a class that will allow output data to be stored in one of RDBMSs supported (PostGIS, MS Server, Oracle spatial, SpatiaLite) [1]&lt;br /&gt;
I downloaded PostgreSQL and PostGIS and run it locally on my computer. I tested it functions correctly by using code I had written previously to GSoC [2] that stores output data in PostGIS. I run some of PyWPS test processes and checked output data does get stored in PostGIS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
Implement PGStorage, a class within the DbStorage class that will store output data to PostGIS and returns database name, schema and table as a reference to the client. &lt;br /&gt;
Start working on implementing MSServerStorage, OciStorage and SpatiaLiteStorage.&lt;br /&gt;
Download, run and test SpatiaLite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/45b98e04c428c2e62643a42bbebfedf8efc0603e&lt;br /&gt;
&lt;br /&gt;
[2] https://github.com/ctu-geoforall-lab-projects/bp-pisl-2018-pywps/commit/c364be4888d74b2285e5a348afc6c3fe184fbc64&lt;br /&gt;
&lt;br /&gt;
=== Week 2===&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
Develop and implement PGStorage, a class within the DbStorage class that will store output data to PostGIS and returns database name, schema and table as a reference to the client.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Study materials on Factory design pattern [2] recommended by my mentor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Download, run and test SpatiaLite. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
Develop, implement and test _MSSQLStorage and _OciStorage _MySQLStorage classes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
I have some questions related to work I will be doing next week. I will consult with my mentor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/254b1e5697c0b4781544a6329b52eb4688e60a22&lt;br /&gt;
&lt;br /&gt;
[2]  http://python-3-patterns-idioms-test.readthedocs.io/en/latest/Factory.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Week 3 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Following my mentor's advice, I made a decision that _MSSQLStorage,  _OciStorage _MySQLStorage classes will not be implemented at this stage. There will only be PgStorage and SQLiteStorage that store data in a PostgreSQL and SQLite databases, respectively &lt;br /&gt;
&lt;br /&gt;
- Define DbStorageAbstract, an abstract class from which PgStorage and SQLiteStorage will inherit [1]&lt;br /&gt;
&lt;br /&gt;
- Develop and implement SQLiteStorage [2] &lt;br /&gt;
&lt;br /&gt;
- Fix/Update DbStorage class [3] &lt;br /&gt;
&lt;br /&gt;
- Update outputs.py so complex output data is either stored as files or in a database depending on configuration [4]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Develop a mechanism for handling raster output data and implement it.&lt;br /&gt;
&lt;br /&gt;
- Decide how other types of data (such as string, table, CSV, etc.) will be handled and implement it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
There is an error occuring when I run PyWPS and I haven't been able to find out what is causing it. I will discuss this with my mentor on a call on Monday morning.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/89ab12a2fd883a0df6c070a4ca573f89b6c31a5a&lt;br /&gt;
&lt;br /&gt;
[2]  https://github.com/janpisl/pywps/commit/864d275fe8c47e41c07f8278b8037e80a0b0b838&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/commit/c0d698cefde9a5085cd7d76bb0e32156a6391880 &lt;br /&gt;
&lt;br /&gt;
[4] https://github.com/janpisl/pywps/commit/7f00fa06ac5fd7823d79a363f6163dcc38e7bbb0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Week 4 === &lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
-I changed the structure of the code. Classes PgStorage and SQLiteStorage are now stored in separate files in the db folder. FileStorage is in a separate file, too. Rest of the code is in the __init__ files. [1]&lt;br /&gt;
&lt;br /&gt;
- I added the data_type attribute to inout/formats/__init__.py. At the moment, allowed values are either vector or raster using the enum module. This was done so when storing output data it can be differed between raster and vector data and appropriate method can be used. [2]&lt;br /&gt;
&lt;br /&gt;
- The Dbstorage class has been simplified. Instead of creating an instance of the class in outputs.py and calling the get_db_type method in the constructor, get_db_type is now a static method and gets called directly in outputs.py [3]&lt;br /&gt;
&lt;br /&gt;
- PgStorage accesses the data_type value and calls appropriate method (store_vector_output or store_raster_output) [4]&lt;br /&gt;
&lt;br /&gt;
- I implemented the store_raster_output method in the PgStorage class [5]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Implement store_raster_output for SQLiteStorage&lt;br /&gt;
&lt;br /&gt;
- Implement another method for storing other types of data (string, CSV, etc.)&lt;br /&gt;
&lt;br /&gt;
- Write a script that tests whether different data types get stored correctly&lt;br /&gt;
&lt;br /&gt;
- Submit the Phase 1 evaluation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/18c46864ff75fb01e3c7d76f3f4a1b6d2457a22f[[2]  https://github.com/janpisl/pywps/commit/4bb079bfcde0b4fcc42393f531e86c47a91507d4&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/commit/80c61c92e183c06af741fe94d0b172f9a5940609&lt;br /&gt;
&lt;br /&gt;
[4] https://github.com/janpisl/pywps/commit/e024b1e5d1eb8df1a79989a59b14276b2757d98d&lt;br /&gt;
&lt;br /&gt;
[5] https://github.com/janpisl/pywps/commit/a09dfc61729b36eb81ddd0d9adb5bda2effe3029&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Week 5=== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
- I updated the store_vector_output method in the SQLite class [1]&lt;br /&gt;
&lt;br /&gt;
- I implemented a method for storing raster outputs in SQLite [2]&lt;br /&gt;
&lt;br /&gt;
- I implemented a method for storing output data of other datatypes in PostgreSQL [3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Write test_storage, a unit test that would test all storage options and their correct functionality&lt;br /&gt;
&lt;br /&gt;
- Handle metadata&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/44e9130c8bbb73841c51a09266a9db62ff2809f9&lt;br /&gt;
&lt;br /&gt;
[2]  https://github.com/janpisl/pywps/commit/5bf8eb883343f0caacd47470bf79152ac751d480&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/commit/50cd11ffa2486ee3de7cac3340874179d81d4e2e&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Week 6 === &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
''' &lt;br /&gt;
&lt;br /&gt;
- Database schema gets created automatically when the DbStorage class is initialized. [1]&lt;br /&gt;
&lt;br /&gt;
- I developed &amp;quot;test_storage&amp;quot; module for testing storing output data [2]&lt;br /&gt;
&lt;br /&gt;
- I implemented unittest classes for testing file storage [3], PostgreSQL storage [4] [5] [6] and SQLite [7] [8]&lt;br /&gt;
&lt;br /&gt;
- Some other minor changes and updates to the code and fixing bugs [9]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Address issues revealed by testing&lt;br /&gt;
&lt;br /&gt;
- Handle metadata&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/524d65f2cb5cdfe5f0bbdf769a9850c32886952e&lt;br /&gt;
&lt;br /&gt;
[2]  https://github.com/janpisl/pywps/commit/1c36dd1ee3b1c61d819b92f5a195792f488b1193&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/commit/2896d7670ed2f38470eab54790ed2e822c42583d&lt;br /&gt;
&lt;br /&gt;
[4] https://github.com/janpisl/pywps/commit/97c8255a9ea3ad52a022d84315eb4e725afe4fc6&lt;br /&gt;
&lt;br /&gt;
[5] https://github.com/janpisl/pywps/commit/16afbea95f1fea31dd3ac9e7a30d63b5d309ad12&lt;br /&gt;
&lt;br /&gt;
[6] https://github.com/janpisl/pywps/commit/b08dee2644888379d08c25919d112b0e29f2423d&lt;br /&gt;
&lt;br /&gt;
[7] https://github.com/janpisl/pywps/commit/c406e21d8ee844e468fe672d236285664a8fde76&lt;br /&gt;
&lt;br /&gt;
[8] https://github.com/janpisl/pywps/commit/a1493e70024d06b3d29d1522edca64af4574de0b&lt;br /&gt;
&lt;br /&gt;
[9] https://github.com/janpisl/pywps/commits/master&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Week 8 reportú=== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
- PgStorage and SQLiteStorage classes inherit from DbStorage [1]&lt;br /&gt;
&lt;br /&gt;
- The &amp;quot;store&amp;quot; method is now implemented in the parent class DbStorage&lt;br /&gt;
&lt;br /&gt;
- Method for storing vector outputs is now implemented in the parent class DbStorage [2]&lt;br /&gt;
&lt;br /&gt;
- Method for storing outputs such as CSV, plain text, etc. is now implemented in the parent class DbStorage [3]&lt;br /&gt;
&lt;br /&gt;
- Each class inheriting from DbStorage now implements a method for initializating database (create schema, etc.) [4]&lt;br /&gt;
&lt;br /&gt;
- Fixing bugs and some other minor changes and updates to the code [5]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Download, compile and run MapServer&lt;br /&gt;
&lt;br /&gt;
- Establish a connection between MapServer and PostgreSQL&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/889ce577747815554970c3c39cebed15fe1d1ca6&lt;br /&gt;
&lt;br /&gt;
[2] https://github.com/janpisl/pywps/commit/68d193aed029e4c6c4d6e8ec73ac44de8c183b71&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/commit/341f8a8eb8d99663e15796e373c5bf78fc9364a6&lt;br /&gt;
&lt;br /&gt;
[4] https://github.com/janpisl/pywps/commit/321d6d8d6caf28131062134a5188eaa61c3e4b38&lt;br /&gt;
&lt;br /&gt;
[5] https://github.com/janpisl/pywps/commits/master&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Google Summer of Code]]&lt;/div&gt;</summary>
		<author><name>Wiki-Janpisl</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Database_Output_Storage_for_PyWPS&amp;diff=115459</id>
		<title>Database Output Storage for PyWPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Database_Output_Storage_for_PyWPS&amp;diff=115459"/>
		<updated>2018-06-24T14:50:39Z</updated>

		<summary type="html">&lt;p&gt;Wiki-Janpisl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
My name is Jan Pisl and I study at the Czech Technical University in Prague. I will be participating in this year's GSoC. My project’s aim is to develop database storage support for PyWPS that would allow output data to be stored in a database in a way that is compliant with the OGC WPS Standard. I will be using Python 3.6. &lt;br /&gt;
&lt;br /&gt;
== Project ==&lt;br /&gt;
Title: Database Output Storage for PyWPS&lt;br /&gt;
&lt;br /&gt;
Student: Jan Pišl&lt;br /&gt;
&lt;br /&gt;
Mentors: [[User:Jachym|Jáchym Čepický]], [[User:Martinl|Martin Landa]].&lt;br /&gt;
&lt;br /&gt;
Project's repositories: [https://github.com/janpisl/pywps GitHub repository], [https://summerofcode.withgoogle.com/projects/#5084513521106944 Project's page on GSoC website] &lt;br /&gt;
&lt;br /&gt;
== Technology ==&lt;br /&gt;
&lt;br /&gt;
=== PyWPS ===&lt;br /&gt;
PyWPS is a server side implementation of the OGC Web Processing Service (OGC&lt;br /&gt;
WPS) standards 1.0.0. It is written in the Python programming language, it runs&lt;br /&gt;
on Python 2.7, 3.3 or higher and it is tested and developed on Linux. It uses&lt;br /&gt;
a ConfigParser format for configuration files. It supports a variety of geospatial&lt;br /&gt;
software and tools such as GRASS GIS, R Project or the GDAL library. Synchronous&lt;br /&gt;
and asynchronuous invocations are supported. As for request encoding, two options&lt;br /&gt;
are available - key-value pairs (using HTTP-GET) or XML payload (using HTTPPOST).&lt;br /&gt;
Every process that is to be deployed on the server is defined as a class&lt;br /&gt;
and has several mandatory parameters. The key parameter called &amp;quot;handler&amp;quot; gets&lt;br /&gt;
invoked every time there is an incoming request, it accepts the request and returns&lt;br /&gt;
a response.&lt;br /&gt;
&lt;br /&gt;
In 2016, it upgraded from PyWPS 3 to PyWPS 4. Some of the more significant&lt;br /&gt;
changes include every input being considered a list of inputs and all inputs having&lt;br /&gt;
file, data and stream attributes. These attributes allow better manipulation&lt;br /&gt;
with data.&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&lt;br /&gt;
Python is a high-level programming language that fully supports object-oriented and&lt;br /&gt;
structured programming. Developed in the late 1980s, the first version 0.9.0 was&lt;br /&gt;
released in 1991. In 2008, Python 3.0 was released. Currently, the most up-to-date&lt;br /&gt;
version available is 3.6.&lt;br /&gt;
It was designed as a syntactically simple language, using whitespace intendantion&lt;br /&gt;
instead of brackets and English words rather than punctuation. It is a dynamicallytyped&lt;br /&gt;
language, which means it is not neccessary to specify a data-type when defining&lt;br /&gt;
a variable. For its simplicity and readability, Python is often considered a good&lt;br /&gt;
first programming language to learn.&lt;br /&gt;
One of the key advantages of Python is its high extensibility. It provides large&lt;br /&gt;
standard libraries and also an extensive number of other modules, packages and&lt;br /&gt;
libraries, so most of the common programming tasks are already solved, scripted&lt;br /&gt;
and made available.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Dates !! Task !! Deliverables&lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period (April, 23 - May, 14) ||&lt;br /&gt;
Initial research on GDAL, MapServer, SQLAlchemy, GeoAlchemy, relational databases (PostgreSQL, Oracle, Microsoft SQL Server, MySQL, SQLite,...) &lt;br /&gt;
&lt;br /&gt;
Select which databases will be supported in this project.&lt;br /&gt;
&lt;br /&gt;
Set up environment for work - virtual environment with a distribution of Linux, instances of selected database management systems for testing. &lt;br /&gt;
| [https://docs.google.com/document/d/1DzdT0bcAmeU4EsoZlg8jBZmcfx6mIPe4Z8PRwsWzP_U/edit#heading=h.9dmblslll4ai Bonding Period Report]&lt;br /&gt;
|-&lt;br /&gt;
| Week 1 (May, 14 - May, 20) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Define “DbStorage”, an abstract base class that will ensure derived classes implement particular methods from this class. Define abstract methods that are necessary for writing output data to a remote database.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 2 (May, 21 - May, 27) ||&lt;br /&gt;
&lt;br /&gt;
Write test script that checks “PgStorage” will work correctly and write output vector data to a PostgreSQL database.&lt;br /&gt;
&lt;br /&gt;
Develop “PgStorage“ class that inherits from “DbStorage” and implements proposed functionality.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 3 (May, 28 - June, 3) ||&lt;br /&gt;
&lt;br /&gt;
Write a test (or update test written in the previous week) to ensure correct functionality of newly developed classes.&lt;br /&gt;
&lt;br /&gt;
Develop several classes based on selection in week 1 – e.g. “MSSQLStorage”, “OCIStorage”, “MySQLStorage”, etc.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 4 (June, 4 - June, 10) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Develop a mechanism for handling raster output data and implement it in the above-mentioned classes. If GDAL does not support writing raster data to a specific database by default, appropriate tool or library must be identified. For example, for writing raster data into PostgreSQL, ”raster2pgsql“ tool can be used.&lt;br /&gt;
&lt;br /&gt;
Decide how other types of data (such as string, table, CSV, etc.) will be handled and implement it.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 5 (June, 11 - June, 15) Phase 1 Evaluation||&lt;br /&gt;
&lt;br /&gt;
Write a test that checks all data types will get correctly stored in database.&lt;br /&gt;
&lt;br /&gt;
Write and submit weekly report.&lt;br /&gt;
&lt;br /&gt;
Write and submit Phase 1 evaluation.&lt;br /&gt;
&lt;br /&gt;
'''Deliverables for Phase 1:''' Correctly functioning and tested module that enables output data (vector, raster or other) to be stored in one of several database management systems.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 6 (June, 16 - June, 24) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Handle metadata. Currently, logs with information about run processes (such as when a process started and finished) are stored in a SQLite database. Implement a functionality that accesses logs, extracts desired metadata from them and saves them in the same database as output data. Use unique identifier of every process to join metadata (using primary key) with the corresponding output data (foreign key). For each run process, include expiration date to its output data.&lt;br /&gt;
&lt;br /&gt;
Develop a trigger that removes output data when it expires.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 7 (June, 25 - July, 1) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Establish a connection between database and MapServer and allow MapServer to access output data stored in database.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 8 (July, 2 - July, 8) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable output data to be viewed as WMS services through MapServer.&lt;br /&gt;
&lt;br /&gt;
Edit current code so the reference embodied in the responding document is a URL link to a running MapServer service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 9 (July, 9 - July, 13) Phase 2 Evaluation||&lt;br /&gt;
&lt;br /&gt;
Write and submit Phase 2 evaluation.&lt;br /&gt;
&lt;br /&gt;
'''Deliverables for Phase 2''': Correctly functioning and tested module that enables output data to be viewed as a Web Map Service using MapServer.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 10 (July, 14 - July, 22) ||&lt;br /&gt;
&lt;br /&gt;
Update previously developed test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable raster output data to be accessed and/or edited as OGC Web Coverage Service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 11 (July, 23 - July, 29) ||&lt;br /&gt;
&lt;br /&gt;
Update previously developed test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable vector output data to be accessed and/or edited as OGC Web Feature Service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 12 (July, 30 - August, 5) ||&lt;br /&gt;
&lt;br /&gt;
Write a test that ensures newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Develop a demo that demonstrates implemented functionality.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 13 (August, 6 - August, 14)&lt;br /&gt;
&lt;br /&gt;
||Create documentation that can be added to the current PyWPS documentation.&lt;br /&gt;
&lt;br /&gt;
Finalize work, clean code and prepare a pull request(s) to PyWPS GitHub repository.&lt;br /&gt;
&lt;br /&gt;
Write and submit final report.&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Reports ==&lt;br /&gt;
=== Bonding Period ===&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/document/d/1DzdT0bcAmeU4EsoZlg8jBZmcfx6mIPe4Z8PRwsWzP_U/edit#heading=h.9dmblslll4ai Bonding Period Report]&lt;br /&gt;
&lt;br /&gt;
=== Week 1===&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
I defined the first version of “DbStorage”, a class that will allow output data to be stored in one of RDBMSs supported (PostGIS, MS Server, Oracle spatial, SpatiaLite) [1]&lt;br /&gt;
I downloaded PostgreSQL and PostGIS and run it locally on my computer. I tested it functions correctly by using code I had written previously to GSoC [2] that stores output data in PostGIS. I run some of PyWPS test processes and checked output data does get stored in PostGIS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
Implement PGStorage, a class within the DbStorage class that will store output data to PostGIS and returns database name, schema and table as a reference to the client. &lt;br /&gt;
Start working on implementing MSServerStorage, OciStorage and SpatiaLiteStorage.&lt;br /&gt;
Download, run and test SpatiaLite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/45b98e04c428c2e62643a42bbebfedf8efc0603e&lt;br /&gt;
&lt;br /&gt;
[2] https://github.com/ctu-geoforall-lab-projects/bp-pisl-2018-pywps/commit/c364be4888d74b2285e5a348afc6c3fe184fbc64&lt;br /&gt;
&lt;br /&gt;
=== Week 2===&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
Develop and implement PGStorage, a class within the DbStorage class that will store output data to PostGIS and returns database name, schema and table as a reference to the client.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Study materials on Factory design pattern [2] recommended by my mentor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Download, run and test SpatiaLite. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
Develop, implement and test _MSSQLStorage and _OciStorage _MySQLStorage classes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
I have some questions related to work I will be doing next week. I will consult with my mentor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/254b1e5697c0b4781544a6329b52eb4688e60a22&lt;br /&gt;
&lt;br /&gt;
[2]  http://python-3-patterns-idioms-test.readthedocs.io/en/latest/Factory.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Week 3 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Following my mentor's advice, I made a decision that _MSSQLStorage,  _OciStorage _MySQLStorage classes will not be implemented at this stage. There will only be PgStorage and SQLiteStorage that store data in a PostgreSQL and SQLite databases, respectively &lt;br /&gt;
&lt;br /&gt;
- Define DbStorageAbstract, an abstract class from which PgStorage and SQLiteStorage will inherit [1]&lt;br /&gt;
&lt;br /&gt;
- Develop and implement SQLiteStorage [2] &lt;br /&gt;
&lt;br /&gt;
- Fix/Update DbStorage class [3] &lt;br /&gt;
&lt;br /&gt;
- Update outputs.py so complex output data is either stored as files or in a database depending on configuration [4]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Develop a mechanism for handling raster output data and implement it.&lt;br /&gt;
&lt;br /&gt;
- Decide how other types of data (such as string, table, CSV, etc.) will be handled and implement it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
There is an error occuring when I run PyWPS and I haven't been able to find out what is causing it. I will discuss this with my mentor on a call on Monday morning.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/89ab12a2fd883a0df6c070a4ca573f89b6c31a5a&lt;br /&gt;
&lt;br /&gt;
[2]  https://github.com/janpisl/pywps/commit/864d275fe8c47e41c07f8278b8037e80a0b0b838&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/commit/c0d698cefde9a5085cd7d76bb0e32156a6391880 &lt;br /&gt;
&lt;br /&gt;
[4] https://github.com/janpisl/pywps/commit/7f00fa06ac5fd7823d79a363f6163dcc38e7bbb0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Week 4 === &lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
-I changed the structure of the code. Classes PgStorage and SQLiteStorage are now stored in separate files in the db folder. FileStorage is in a separate file, too. Rest of the code is in the __init__ files. [1]&lt;br /&gt;
&lt;br /&gt;
- I added the data_type attribute to inout/formats/__init__.py. At the moment, allowed values are either vector or raster using the enum module. This was done so when storing output data it can be differed between raster and vector data and appropriate method can be used. [2]&lt;br /&gt;
&lt;br /&gt;
- The Dbstorage class has been simplified. Instead of creating an instance of the class in outputs.py and calling the get_db_type method in the constructor, get_db_type is now a static method and gets called directly in outputs.py [3]&lt;br /&gt;
&lt;br /&gt;
- PgStorage accesses the data_type value and calls appropriate method (store_vector_output or store_raster_output) [4]&lt;br /&gt;
&lt;br /&gt;
- I implemented the store_raster_output method in the PgStorage class [5]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Implement store_raster_output for SQLiteStorage&lt;br /&gt;
&lt;br /&gt;
- Implement another method for storing other types of data (string, CSV, etc.)&lt;br /&gt;
&lt;br /&gt;
- Write a script that tests whether different data types get stored correctly&lt;br /&gt;
&lt;br /&gt;
- Submit the Phase 1 evaluation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/18c46864ff75fb01e3c7d76f3f4a1b6d2457a22f[[2]  https://github.com/janpisl/pywps/commit/4bb079bfcde0b4fcc42393f531e86c47a91507d4&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/commit/80c61c92e183c06af741fe94d0b172f9a5940609&lt;br /&gt;
&lt;br /&gt;
[4] https://github.com/janpisl/pywps/commit/e024b1e5d1eb8df1a79989a59b14276b2757d98d&lt;br /&gt;
&lt;br /&gt;
[5] https://github.com/janpisl/pywps/commit/a09dfc61729b36eb81ddd0d9adb5bda2effe3029&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Week 5=== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
- I updated the store_vector_output method in the SQLite class [1]&lt;br /&gt;
&lt;br /&gt;
- I implemented a method for storing raster outputs in SQLite [2]&lt;br /&gt;
&lt;br /&gt;
- I implemented a method for storing output data of other datatypes in PostgreSQL [3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Write test_storage, a unit test that would test all storage options and their correct functionality&lt;br /&gt;
&lt;br /&gt;
- Handle metadata&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/44e9130c8bbb73841c51a09266a9db62ff2809f9&lt;br /&gt;
&lt;br /&gt;
[2]  https://github.com/janpisl/pywps/commit/5bf8eb883343f0caacd47470bf79152ac751d480&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/commit/50cd11ffa2486ee3de7cac3340874179d81d4e2e&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Week 6 === &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
''' &lt;br /&gt;
&lt;br /&gt;
- Database schema gets created automatically when the DbStorage class is initialized. [1]&lt;br /&gt;
&lt;br /&gt;
- I developed &amp;quot;test_storage&amp;quot; module for testing storing output data [2]&lt;br /&gt;
&lt;br /&gt;
- I implemented unittest classes for testing file storage [3], PostgreSQL storage [4] [5] [6] and SQLite [7] [8]&lt;br /&gt;
&lt;br /&gt;
- Some other minor changes and updates to the code and fixing bugs [9]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Address issues revealed by testing&lt;br /&gt;
&lt;br /&gt;
- Handle metadata&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/524d65f2cb5cdfe5f0bbdf769a9850c32886952e&lt;br /&gt;
&lt;br /&gt;
[2]  https://github.com/janpisl/pywps/commit/1c36dd1ee3b1c61d819b92f5a195792f488b1193&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/commit/2896d7670ed2f38470eab54790ed2e822c42583d&lt;br /&gt;
&lt;br /&gt;
[4] https://github.com/janpisl/pywps/commit/97c8255a9ea3ad52a022d84315eb4e725afe4fc6&lt;br /&gt;
&lt;br /&gt;
[5] https://github.com/janpisl/pywps/commit/16afbea95f1fea31dd3ac9e7a30d63b5d309ad12&lt;br /&gt;
&lt;br /&gt;
[6] https://github.com/janpisl/pywps/commit/b08dee2644888379d08c25919d112b0e29f2423d&lt;br /&gt;
&lt;br /&gt;
[7] https://github.com/janpisl/pywps/commit/c406e21d8ee844e468fe672d236285664a8fde76&lt;br /&gt;
&lt;br /&gt;
[8] https://github.com/janpisl/pywps/commit/a1493e70024d06b3d29d1522edca64af4574de0b&lt;br /&gt;
&lt;br /&gt;
[9] https://github.com/janpisl/pywps/commits/master&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Google Summer of Code]]&lt;/div&gt;</summary>
		<author><name>Wiki-Janpisl</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Database_Output_Storage_for_PyWPS&amp;diff=115373</id>
		<title>Database Output Storage for PyWPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Database_Output_Storage_for_PyWPS&amp;diff=115373"/>
		<updated>2018-06-17T17:39:40Z</updated>

		<summary type="html">&lt;p&gt;Wiki-Janpisl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
My name is Jan Pisl and I study at the Czech Technical University in Prague. I will be participating in this year's GSoC. My project’s aim is to develop database storage support for PyWPS that would allow output data to be stored in a database in a way that is compliant with the OGC WPS Standard. I will be using Python 3.6. &lt;br /&gt;
&lt;br /&gt;
== Project ==&lt;br /&gt;
Title: Database Output Storage for PyWPS&lt;br /&gt;
&lt;br /&gt;
Student: Jan Pišl&lt;br /&gt;
&lt;br /&gt;
Mentors: [[User:Jachym|Jáchym Čepický]], [[User:Martinl|Martin Landa]].&lt;br /&gt;
&lt;br /&gt;
Project's repositories: [https://github.com/janpisl/pywps GitHub repository], [https://summerofcode.withgoogle.com/projects/#5084513521106944 Project's page on GSoC website] &lt;br /&gt;
&lt;br /&gt;
== Technology ==&lt;br /&gt;
&lt;br /&gt;
=== PyWPS ===&lt;br /&gt;
PyWPS is a server side implementation of the OGC Web Processing Service (OGC&lt;br /&gt;
WPS) standards 1.0.0. It is written in the Python programming language, it runs&lt;br /&gt;
on Python 2.7, 3.3 or higher and it is tested and developed on Linux. It uses&lt;br /&gt;
a ConfigParser format for configuration files. It supports a variety of geospatial&lt;br /&gt;
software and tools such as GRASS GIS, R Project or the GDAL library. Synchronous&lt;br /&gt;
and asynchronuous invocations are supported. As for request encoding, two options&lt;br /&gt;
are available - key-value pairs (using HTTP-GET) or XML payload (using HTTPPOST).&lt;br /&gt;
Every process that is to be deployed on the server is defined as a class&lt;br /&gt;
and has several mandatory parameters. The key parameter called &amp;quot;handler&amp;quot; gets&lt;br /&gt;
invoked every time there is an incoming request, it accepts the request and returns&lt;br /&gt;
a response.&lt;br /&gt;
&lt;br /&gt;
In 2016, it upgraded from PyWPS 3 to PyWPS 4. Some of the more significant&lt;br /&gt;
changes include every input being considered a list of inputs and all inputs having&lt;br /&gt;
file, data and stream attributes. These attributes allow better manipulation&lt;br /&gt;
with data.&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&lt;br /&gt;
Python is a high-level programming language that fully supports object-oriented and&lt;br /&gt;
structured programming. Developed in the late 1980s, the first version 0.9.0 was&lt;br /&gt;
released in 1991. In 2008, Python 3.0 was released. Currently, the most up-to-date&lt;br /&gt;
version available is 3.6.&lt;br /&gt;
It was designed as a syntactically simple language, using whitespace intendantion&lt;br /&gt;
instead of brackets and English words rather than punctuation. It is a dynamicallytyped&lt;br /&gt;
language, which means it is not neccessary to specify a data-type when defining&lt;br /&gt;
a variable. For its simplicity and readability, Python is often considered a good&lt;br /&gt;
first programming language to learn.&lt;br /&gt;
One of the key advantages of Python is its high extensibility. It provides large&lt;br /&gt;
standard libraries and also an extensive number of other modules, packages and&lt;br /&gt;
libraries, so most of the common programming tasks are already solved, scripted&lt;br /&gt;
and made available.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Dates !! Task !! Deliverables&lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period (April, 23 - May, 14) ||&lt;br /&gt;
Initial research on GDAL, MapServer, SQLAlchemy, GeoAlchemy, relational databases (PostgreSQL, Oracle, Microsoft SQL Server, MySQL, SQLite,...) &lt;br /&gt;
&lt;br /&gt;
Select which databases will be supported in this project.&lt;br /&gt;
&lt;br /&gt;
Set up environment for work - virtual environment with a distribution of Linux, instances of selected database management systems for testing. &lt;br /&gt;
| [https://docs.google.com/document/d/1DzdT0bcAmeU4EsoZlg8jBZmcfx6mIPe4Z8PRwsWzP_U/edit#heading=h.9dmblslll4ai Bonding Period Report]&lt;br /&gt;
|-&lt;br /&gt;
| Week 1 (May, 14 - May, 20) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Define “DbStorage”, an abstract base class that will ensure derived classes implement particular methods from this class. Define abstract methods that are necessary for writing output data to a remote database.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 2 (May, 21 - May, 27) ||&lt;br /&gt;
&lt;br /&gt;
Write test script that checks “PgStorage” will work correctly and write output vector data to a PostgreSQL database.&lt;br /&gt;
&lt;br /&gt;
Develop “PgStorage“ class that inherits from “DbStorage” and implements proposed functionality.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 3 (May, 28 - June, 3) ||&lt;br /&gt;
&lt;br /&gt;
Write a test (or update test written in the previous week) to ensure correct functionality of newly developed classes.&lt;br /&gt;
&lt;br /&gt;
Develop several classes based on selection in week 1 – e.g. “MSSQLStorage”, “OCIStorage”, “MySQLStorage”, etc.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 4 (June, 4 - June, 10) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Develop a mechanism for handling raster output data and implement it in the above-mentioned classes. If GDAL does not support writing raster data to a specific database by default, appropriate tool or library must be identified. For example, for writing raster data into PostgreSQL, ”raster2pgsql“ tool can be used.&lt;br /&gt;
&lt;br /&gt;
Decide how other types of data (such as string, table, CSV, etc.) will be handled and implement it.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 5 (June, 11 - June, 15) Phase 1 Evaluation||&lt;br /&gt;
&lt;br /&gt;
Write a test that checks all data types will get correctly stored in database.&lt;br /&gt;
&lt;br /&gt;
Write and submit weekly report.&lt;br /&gt;
&lt;br /&gt;
Write and submit Phase 1 evaluation.&lt;br /&gt;
&lt;br /&gt;
'''Deliverables for Phase 1:''' Correctly functioning and tested module that enables output data (vector, raster or other) to be stored in one of several database management systems.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 6 (June, 16 - June, 24) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Handle metadata. Currently, logs with information about run processes (such as when a process started and finished) are stored in a SQLite database. Implement a functionality that accesses logs, extracts desired metadata from them and saves them in the same database as output data. Use unique identifier of every process to join metadata (using primary key) with the corresponding output data (foreign key). For each run process, include expiration date to its output data.&lt;br /&gt;
&lt;br /&gt;
Develop a trigger that removes output data when it expires.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 7 (June, 25 - July, 1) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Establish a connection between database and MapServer and allow MapServer to access output data stored in database.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 8 (July, 2 - July, 8) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable output data to be viewed as WMS services through MapServer.&lt;br /&gt;
&lt;br /&gt;
Edit current code so the reference embodied in the responding document is a URL link to a running MapServer service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 9 (July, 9 - July, 13) Phase 2 Evaluation||&lt;br /&gt;
&lt;br /&gt;
Write and submit Phase 2 evaluation.&lt;br /&gt;
&lt;br /&gt;
'''Deliverables for Phase 2''': Correctly functioning and tested module that enables output data to be viewed as a Web Map Service using MapServer.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 10 (July, 14 - July, 22) ||&lt;br /&gt;
&lt;br /&gt;
Update previously developed test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable raster output data to be accessed and/or edited as OGC Web Coverage Service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 11 (July, 23 - July, 29) ||&lt;br /&gt;
&lt;br /&gt;
Update previously developed test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable vector output data to be accessed and/or edited as OGC Web Feature Service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 12 (July, 30 - August, 5) ||&lt;br /&gt;
&lt;br /&gt;
Write a test that ensures newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Develop a demo that demonstrates implemented functionality.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 13 (August, 6 - August, 14)&lt;br /&gt;
&lt;br /&gt;
||Create documentation that can be added to the current PyWPS documentation.&lt;br /&gt;
&lt;br /&gt;
Finalize work, clean code and prepare a pull request(s) to PyWPS GitHub repository.&lt;br /&gt;
&lt;br /&gt;
Write and submit final report.&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Reports ==&lt;br /&gt;
=== Bonding Period ===&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/document/d/1DzdT0bcAmeU4EsoZlg8jBZmcfx6mIPe4Z8PRwsWzP_U/edit#heading=h.9dmblslll4ai Bonding Period Report]&lt;br /&gt;
&lt;br /&gt;
=== Week 1===&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
I defined the first version of “DbStorage”, a class that will allow output data to be stored in one of RDBMSs supported (PostGIS, MS Server, Oracle spatial, SpatiaLite) [1]&lt;br /&gt;
I downloaded PostgreSQL and PostGIS and run it locally on my computer. I tested it functions correctly by using code I had written previously to GSoC [2] that stores output data in PostGIS. I run some of PyWPS test processes and checked output data does get stored in PostGIS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
Implement PGStorage, a class within the DbStorage class that will store output data to PostGIS and returns database name, schema and table as a reference to the client. &lt;br /&gt;
Start working on implementing MSServerStorage, OciStorage and SpatiaLiteStorage.&lt;br /&gt;
Download, run and test SpatiaLite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/45b98e04c428c2e62643a42bbebfedf8efc0603e&lt;br /&gt;
&lt;br /&gt;
[2] https://github.com/ctu-geoforall-lab-projects/bp-pisl-2018-pywps/commit/c364be4888d74b2285e5a348afc6c3fe184fbc64&lt;br /&gt;
&lt;br /&gt;
=== Week 2===&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
Develop and implement PGStorage, a class within the DbStorage class that will store output data to PostGIS and returns database name, schema and table as a reference to the client.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Study materials on Factory design pattern [2] recommended by my mentor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Download, run and test SpatiaLite. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
Develop, implement and test _MSSQLStorage and _OciStorage _MySQLStorage classes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
I have some questions related to work I will be doing next week. I will consult with my mentor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/254b1e5697c0b4781544a6329b52eb4688e60a22&lt;br /&gt;
&lt;br /&gt;
[2]  http://python-3-patterns-idioms-test.readthedocs.io/en/latest/Factory.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Week 3 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Following my mentor's advice, I made a decision that _MSSQLStorage,  _OciStorage _MySQLStorage classes will not be implemented at this stage. There will only be PgStorage and SQLiteStorage that store data in a PostgreSQL and SQLite databases, respectively &lt;br /&gt;
&lt;br /&gt;
- Define DbStorageAbstract, an abstract class from which PgStorage and SQLiteStorage will inherit [1]&lt;br /&gt;
&lt;br /&gt;
- Develop and implement SQLiteStorage [2] &lt;br /&gt;
&lt;br /&gt;
- Fix/Update DbStorage class [3] &lt;br /&gt;
&lt;br /&gt;
- Update outputs.py so complex output data is either stored as files or in a database depending on configuration [4]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Develop a mechanism for handling raster output data and implement it.&lt;br /&gt;
&lt;br /&gt;
- Decide how other types of data (such as string, table, CSV, etc.) will be handled and implement it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
There is an error occuring when I run PyWPS and I haven't been able to find out what is causing it. I will discuss this with my mentor on a call on Monday morning.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/89ab12a2fd883a0df6c070a4ca573f89b6c31a5a&lt;br /&gt;
&lt;br /&gt;
[2]  https://github.com/janpisl/pywps/commit/864d275fe8c47e41c07f8278b8037e80a0b0b838&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/commit/c0d698cefde9a5085cd7d76bb0e32156a6391880 &lt;br /&gt;
&lt;br /&gt;
[4] https://github.com/janpisl/pywps/commit/7f00fa06ac5fd7823d79a363f6163dcc38e7bbb0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Week 4 === &lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
-I changed the structure of the code. Classes PgStorage and SQLiteStorage are now stored in separate files in the db folder. FileStorage is in a separate file, too. Rest of the code is in the __init__ files. [1]&lt;br /&gt;
&lt;br /&gt;
- I added the data_type attribute to inout/formats/__init__.py. At the moment, allowed values are either vector or raster using the enum module. This was done so when storing output data it can be differed between raster and vector data and appropriate method can be used. [2]&lt;br /&gt;
&lt;br /&gt;
- The Dbstorage class has been simplified. Instead of creating an instance of the class in outputs.py and calling the get_db_type method in the constructor, get_db_type is now a static method and gets called directly in outputs.py [3]&lt;br /&gt;
&lt;br /&gt;
- PgStorage accesses the data_type value and calls appropriate method (store_vector_output or store_raster_output) [4]&lt;br /&gt;
&lt;br /&gt;
- I implemented the store_raster_output method in the PgStorage class [5]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Implement store_raster_output for SQLiteStorage&lt;br /&gt;
&lt;br /&gt;
- Implement another method for storing other types of data (string, CSV, etc.)&lt;br /&gt;
&lt;br /&gt;
- Write a script that tests whether different data types get stored correctly&lt;br /&gt;
&lt;br /&gt;
- Submit the Phase 1 evaluation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/18c46864ff75fb01e3c7d76f3f4a1b6d2457a22f[[2]  https://github.com/janpisl/pywps/commit/4bb079bfcde0b4fcc42393f531e86c47a91507d4&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/commit/80c61c92e183c06af741fe94d0b172f9a5940609&lt;br /&gt;
&lt;br /&gt;
[4] https://github.com/janpisl/pywps/commit/e024b1e5d1eb8df1a79989a59b14276b2757d98d&lt;br /&gt;
&lt;br /&gt;
[5] https://github.com/janpisl/pywps/commit/a09dfc61729b36eb81ddd0d9adb5bda2effe3029&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Week 5=== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
- I updated the store_vector_output method in the SQLite class [1]&lt;br /&gt;
&lt;br /&gt;
- I implemented a method for storing raster outputs in SQLite [2]&lt;br /&gt;
&lt;br /&gt;
- I implemented a method for storing output data of other datatypes in PostgreSQL [3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Write test_storage, a unit test that would test all storage options and their correct functionality&lt;br /&gt;
&lt;br /&gt;
- Handle metadata&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/44e9130c8bbb73841c51a09266a9db62ff2809f9&lt;br /&gt;
&lt;br /&gt;
[2]  https://github.com/janpisl/pywps/commit/5bf8eb883343f0caacd47470bf79152ac751d480&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/commit/50cd11ffa2486ee3de7cac3340874179d81d4e2e&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Google Summer of Code]]&lt;/div&gt;</summary>
		<author><name>Wiki-Janpisl</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Database_Output_Storage_for_PyWPS&amp;diff=115285</id>
		<title>Database Output Storage for PyWPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Database_Output_Storage_for_PyWPS&amp;diff=115285"/>
		<updated>2018-06-10T17:24:35Z</updated>

		<summary type="html">&lt;p&gt;Wiki-Janpisl: /* Week 4 report */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
My name is Jan Pisl and I study at the Czech Technical University in Prague. I will be participating in this year's GSoC. My project’s aim is to develop database storage support for PyWPS that would allow output data to be stored in a database in a way that is compliant with the OGC WPS Standard. I will be using Python 3.6. &lt;br /&gt;
&lt;br /&gt;
== Project ==&lt;br /&gt;
Title: Database Output Storage for PyWPS&lt;br /&gt;
&lt;br /&gt;
Student: Jan Pišl&lt;br /&gt;
&lt;br /&gt;
Mentors: [[User:Jachym|Jáchym Čepický]], [[User:Martinl|Martin Landa]].&lt;br /&gt;
&lt;br /&gt;
Project's repositories: [https://github.com/janpisl/pywps GitHub repository], [https://summerofcode.withgoogle.com/projects/#5084513521106944 Project's page on GSoC website] &lt;br /&gt;
&lt;br /&gt;
== Technology ==&lt;br /&gt;
&lt;br /&gt;
=== PyWPS ===&lt;br /&gt;
PyWPS is a server side implementation of the OGC Web Processing Service (OGC&lt;br /&gt;
WPS) standards 1.0.0. It is written in the Python programming language, it runs&lt;br /&gt;
on Python 2.7, 3.3 or higher and it is tested and developed on Linux. It uses&lt;br /&gt;
a ConfigParser format for configuration files. It supports a variety of geospatial&lt;br /&gt;
software and tools such as GRASS GIS, R Project or the GDAL library. Synchronous&lt;br /&gt;
and asynchronuous invocations are supported. As for request encoding, two options&lt;br /&gt;
are available - key-value pairs (using HTTP-GET) or XML payload (using HTTPPOST).&lt;br /&gt;
Every process that is to be deployed on the server is defined as a class&lt;br /&gt;
and has several mandatory parameters. The key parameter called &amp;quot;handler&amp;quot; gets&lt;br /&gt;
invoked every time there is an incoming request, it accepts the request and returns&lt;br /&gt;
a response.&lt;br /&gt;
&lt;br /&gt;
In 2016, it upgraded from PyWPS 3 to PyWPS 4. Some of the more significant&lt;br /&gt;
changes include every input being considered a list of inputs and all inputs having&lt;br /&gt;
file, data and stream attributes. These attributes allow better manipulation&lt;br /&gt;
with data.&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&lt;br /&gt;
Python is a high-level programming language that fully supports object-oriented and&lt;br /&gt;
structured programming. Developed in the late 1980s, the first version 0.9.0 was&lt;br /&gt;
released in 1991. In 2008, Python 3.0 was released. Currently, the most up-to-date&lt;br /&gt;
version available is 3.6.&lt;br /&gt;
It was designed as a syntactically simple language, using whitespace intendantion&lt;br /&gt;
instead of brackets and English words rather than punctuation. It is a dynamicallytyped&lt;br /&gt;
language, which means it is not neccessary to specify a data-type when defining&lt;br /&gt;
a variable. For its simplicity and readability, Python is often considered a good&lt;br /&gt;
first programming language to learn.&lt;br /&gt;
One of the key advantages of Python is its high extensibility. It provides large&lt;br /&gt;
standard libraries and also an extensive number of other modules, packages and&lt;br /&gt;
libraries, so most of the common programming tasks are already solved, scripted&lt;br /&gt;
and made available.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Dates !! Task !! Deliverables&lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period (April, 23 - May, 14) ||&lt;br /&gt;
Initial research on GDAL, MapServer, SQLAlchemy, GeoAlchemy, relational databases (PostgreSQL, Oracle, Microsoft SQL Server, MySQL, SQLite,...) &lt;br /&gt;
&lt;br /&gt;
Select which databases will be supported in this project.&lt;br /&gt;
&lt;br /&gt;
Set up environment for work - virtual environment with a distribution of Linux, instances of selected database management systems for testing. &lt;br /&gt;
| [https://docs.google.com/document/d/1DzdT0bcAmeU4EsoZlg8jBZmcfx6mIPe4Z8PRwsWzP_U/edit#heading=h.9dmblslll4ai Bonding Period Report]&lt;br /&gt;
|-&lt;br /&gt;
| Week 1 (May, 14 - May, 20) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Define “DbStorage”, an abstract base class that will ensure derived classes implement particular methods from this class. Define abstract methods that are necessary for writing output data to a remote database.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 2 (May, 21 - May, 27) ||&lt;br /&gt;
&lt;br /&gt;
Write test script that checks “PgStorage” will work correctly and write output vector data to a PostgreSQL database.&lt;br /&gt;
&lt;br /&gt;
Develop “PgStorage“ class that inherits from “DbStorage” and implements proposed functionality.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 3 (May, 28 - June, 3) ||&lt;br /&gt;
&lt;br /&gt;
Write a test (or update test written in the previous week) to ensure correct functionality of newly developed classes.&lt;br /&gt;
&lt;br /&gt;
Develop several classes based on selection in week 1 – e.g. “MSSQLStorage”, “OCIStorage”, “MySQLStorage”, etc.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 4 (June, 4 - June, 10) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Develop a mechanism for handling raster output data and implement it in the above-mentioned classes. If GDAL does not support writing raster data to a specific database by default, appropriate tool or library must be identified. For example, for writing raster data into PostgreSQL, ”raster2pgsql“ tool can be used.&lt;br /&gt;
&lt;br /&gt;
Decide how other types of data (such as string, table, CSV, etc.) will be handled and implement it.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 5 (June, 11 - June, 15) Phase 1 Evaluation||&lt;br /&gt;
&lt;br /&gt;
Write a test that checks all data types will get correctly stored in database.&lt;br /&gt;
&lt;br /&gt;
Write and submit weekly report.&lt;br /&gt;
&lt;br /&gt;
Write and submit Phase 1 evaluation.&lt;br /&gt;
&lt;br /&gt;
'''Deliverables for Phase 1:''' Correctly functioning and tested module that enables output data (vector, raster or other) to be stored in one of several database management systems.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 6 (June, 16 - June, 24) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Handle metadata. Currently, logs with information about run processes (such as when a process started and finished) are stored in a SQLite database. Implement a functionality that accesses logs, extracts desired metadata from them and saves them in the same database as output data. Use unique identifier of every process to join metadata (using primary key) with the corresponding output data (foreign key). For each run process, include expiration date to its output data.&lt;br /&gt;
&lt;br /&gt;
Develop a trigger that removes output data when it expires.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 7 (June, 25 - July, 1) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Establish a connection between database and MapServer and allow MapServer to access output data stored in database.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 8 (July, 2 - July, 8) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable output data to be viewed as WMS services through MapServer.&lt;br /&gt;
&lt;br /&gt;
Edit current code so the reference embodied in the responding document is a URL link to a running MapServer service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 9 (July, 9 - July, 13) Phase 2 Evaluation||&lt;br /&gt;
&lt;br /&gt;
Write and submit Phase 2 evaluation.&lt;br /&gt;
&lt;br /&gt;
'''Deliverables for Phase 2''': Correctly functioning and tested module that enables output data to be viewed as a Web Map Service using MapServer.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 10 (July, 14 - July, 22) ||&lt;br /&gt;
&lt;br /&gt;
Update previously developed test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable raster output data to be accessed and/or edited as OGC Web Coverage Service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 11 (July, 23 - July, 29) ||&lt;br /&gt;
&lt;br /&gt;
Update previously developed test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable vector output data to be accessed and/or edited as OGC Web Feature Service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 12 (July, 30 - August, 5) ||&lt;br /&gt;
&lt;br /&gt;
Write a test that ensures newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Develop a demo that demonstrates implemented functionality.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 13 (August, 6 - August, 14)&lt;br /&gt;
&lt;br /&gt;
||Create documentation that can be added to the current PyWPS documentation.&lt;br /&gt;
&lt;br /&gt;
Finalize work, clean code and prepare a pull request(s) to PyWPS GitHub repository.&lt;br /&gt;
&lt;br /&gt;
Write and submit final report.&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Reports ==&lt;br /&gt;
=== Bonding Period ===&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/document/d/1DzdT0bcAmeU4EsoZlg8jBZmcfx6mIPe4Z8PRwsWzP_U/edit#heading=h.9dmblslll4ai Bonding Period Report]&lt;br /&gt;
&lt;br /&gt;
=== Week 1===&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
I defined the first version of “DbStorage”, a class that will allow output data to be stored in one of RDBMSs supported (PostGIS, MS Server, Oracle spatial, SpatiaLite) [1]&lt;br /&gt;
I downloaded PostgreSQL and PostGIS and run it locally on my computer. I tested it functions correctly by using code I had written previously to GSoC [2] that stores output data in PostGIS. I run some of PyWPS test processes and checked output data does get stored in PostGIS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
Implement PGStorage, a class within the DbStorage class that will store output data to PostGIS and returns database name, schema and table as a reference to the client. &lt;br /&gt;
Start working on implementing MSServerStorage, OciStorage and SpatiaLiteStorage.&lt;br /&gt;
Download, run and test SpatiaLite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/45b98e04c428c2e62643a42bbebfedf8efc0603e&lt;br /&gt;
&lt;br /&gt;
[2] https://github.com/ctu-geoforall-lab-projects/bp-pisl-2018-pywps/commit/c364be4888d74b2285e5a348afc6c3fe184fbc64&lt;br /&gt;
&lt;br /&gt;
=== Week 2===&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
Develop and implement PGStorage, a class within the DbStorage class that will store output data to PostGIS and returns database name, schema and table as a reference to the client.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Study materials on Factory design pattern [2] recommended by my mentor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Download, run and test SpatiaLite. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
Develop, implement and test _MSSQLStorage and _OciStorage _MySQLStorage classes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
I have some questions related to work I will be doing next week. I will consult with my mentor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/254b1e5697c0b4781544a6329b52eb4688e60a22&lt;br /&gt;
&lt;br /&gt;
[2]  http://python-3-patterns-idioms-test.readthedocs.io/en/latest/Factory.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Week 3 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Following my mentor's advice, I made a decision that _MSSQLStorage,  _OciStorage _MySQLStorage classes will not be implemented at this stage. There will only be PgStorage and SQLiteStorage that store data in a PostgreSQL and SQLite databases, respectively &lt;br /&gt;
&lt;br /&gt;
- Define DbStorageAbstract, an abstract class from which PgStorage and SQLiteStorage will inherit [1]&lt;br /&gt;
&lt;br /&gt;
- Develop and implement SQLiteStorage [2] &lt;br /&gt;
&lt;br /&gt;
- Fix/Update DbStorage class [3] &lt;br /&gt;
&lt;br /&gt;
- Update outputs.py so complex output data is either stored as files or in a database depending on configuration [4]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Develop a mechanism for handling raster output data and implement it.&lt;br /&gt;
&lt;br /&gt;
- Decide how other types of data (such as string, table, CSV, etc.) will be handled and implement it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
There is an error occuring when I run PyWPS and I haven't been able to find out what is causing it. I will discuss this with my mentor on a call on Monday morning.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/89ab12a2fd883a0df6c070a4ca573f89b6c31a5a&lt;br /&gt;
&lt;br /&gt;
[2]  https://github.com/janpisl/pywps/commit/864d275fe8c47e41c07f8278b8037e80a0b0b838&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/commit/c0d698cefde9a5085cd7d76bb0e32156a6391880 &lt;br /&gt;
&lt;br /&gt;
[4] https://github.com/janpisl/pywps/commit/7f00fa06ac5fd7823d79a363f6163dcc38e7bbb0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Week 4 === &lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
-I changed the structure of the code. Classes PgStorage and SQLiteStorage are now stored in separate files in the db folder. FileStorage is in a separate file, too. Rest of the code is in the __init__ files. [1]&lt;br /&gt;
&lt;br /&gt;
- I added the data_type attribute to inout/formats/__init__.py. At the moment, allowed values are either vector or raster using the enum module. This was done so when storing output data it can be differed between raster and vector data and appropriate method can be used. [2]&lt;br /&gt;
&lt;br /&gt;
- The Dbstorage class has been simplified. Instead of creating an instance of the class in outputs.py and calling the get_db_type method in the constructor, get_db_type is now a static method and gets called directly in outputs.py [3]&lt;br /&gt;
&lt;br /&gt;
- PgStorage accesses the data_type value and calls appropriate method (store_vector_output or store_raster_output) [4]&lt;br /&gt;
&lt;br /&gt;
- I implemented the store_raster_output method in the PgStorage class [5]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Implement store_raster_output for SQLiteStorage&lt;br /&gt;
&lt;br /&gt;
- Implement another method for storing other types of data (string, CSV, etc.)&lt;br /&gt;
&lt;br /&gt;
- Write a script that tests whether different data types get stored correctly&lt;br /&gt;
&lt;br /&gt;
- Submit the Phase 1 evaluation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/18c46864ff75fb01e3c7d76f3f4a1b6d2457a22f[[2]  https://github.com/janpisl/pywps/commit/4bb079bfcde0b4fcc42393f531e86c47a91507d4&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/commit/80c61c92e183c06af741fe94d0b172f9a5940609&lt;br /&gt;
&lt;br /&gt;
[4] https://github.com/janpisl/pywps/commit/e024b1e5d1eb8df1a79989a59b14276b2757d98d&lt;br /&gt;
&lt;br /&gt;
[5] https://github.com/janpisl/pywps/commit/a09dfc61729b36eb81ddd0d9adb5bda2effe3029&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Google Summer of Code]]&lt;/div&gt;</summary>
		<author><name>Wiki-Janpisl</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Database_Output_Storage_for_PyWPS&amp;diff=115284</id>
		<title>Database Output Storage for PyWPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Database_Output_Storage_for_PyWPS&amp;diff=115284"/>
		<updated>2018-06-10T17:12:17Z</updated>

		<summary type="html">&lt;p&gt;Wiki-Janpisl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
My name is Jan Pisl and I study at the Czech Technical University in Prague. I will be participating in this year's GSoC. My project’s aim is to develop database storage support for PyWPS that would allow output data to be stored in a database in a way that is compliant with the OGC WPS Standard. I will be using Python 3.6. &lt;br /&gt;
&lt;br /&gt;
== Project ==&lt;br /&gt;
Title: Database Output Storage for PyWPS&lt;br /&gt;
&lt;br /&gt;
Student: Jan Pišl&lt;br /&gt;
&lt;br /&gt;
Mentors: [[User:Jachym|Jáchym Čepický]], [[User:Martinl|Martin Landa]].&lt;br /&gt;
&lt;br /&gt;
Project's repositories: [https://github.com/janpisl/pywps GitHub repository], [https://summerofcode.withgoogle.com/projects/#5084513521106944 Project's page on GSoC website] &lt;br /&gt;
&lt;br /&gt;
== Technology ==&lt;br /&gt;
&lt;br /&gt;
=== PyWPS ===&lt;br /&gt;
PyWPS is a server side implementation of the OGC Web Processing Service (OGC&lt;br /&gt;
WPS) standards 1.0.0. It is written in the Python programming language, it runs&lt;br /&gt;
on Python 2.7, 3.3 or higher and it is tested and developed on Linux. It uses&lt;br /&gt;
a ConfigParser format for configuration files. It supports a variety of geospatial&lt;br /&gt;
software and tools such as GRASS GIS, R Project or the GDAL library. Synchronous&lt;br /&gt;
and asynchronuous invocations are supported. As for request encoding, two options&lt;br /&gt;
are available - key-value pairs (using HTTP-GET) or XML payload (using HTTPPOST).&lt;br /&gt;
Every process that is to be deployed on the server is defined as a class&lt;br /&gt;
and has several mandatory parameters. The key parameter called &amp;quot;handler&amp;quot; gets&lt;br /&gt;
invoked every time there is an incoming request, it accepts the request and returns&lt;br /&gt;
a response.&lt;br /&gt;
&lt;br /&gt;
In 2016, it upgraded from PyWPS 3 to PyWPS 4. Some of the more significant&lt;br /&gt;
changes include every input being considered a list of inputs and all inputs having&lt;br /&gt;
file, data and stream attributes. These attributes allow better manipulation&lt;br /&gt;
with data.&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&lt;br /&gt;
Python is a high-level programming language that fully supports object-oriented and&lt;br /&gt;
structured programming. Developed in the late 1980s, the first version 0.9.0 was&lt;br /&gt;
released in 1991. In 2008, Python 3.0 was released. Currently, the most up-to-date&lt;br /&gt;
version available is 3.6.&lt;br /&gt;
It was designed as a syntactically simple language, using whitespace intendantion&lt;br /&gt;
instead of brackets and English words rather than punctuation. It is a dynamicallytyped&lt;br /&gt;
language, which means it is not neccessary to specify a data-type when defining&lt;br /&gt;
a variable. For its simplicity and readability, Python is often considered a good&lt;br /&gt;
first programming language to learn.&lt;br /&gt;
One of the key advantages of Python is its high extensibility. It provides large&lt;br /&gt;
standard libraries and also an extensive number of other modules, packages and&lt;br /&gt;
libraries, so most of the common programming tasks are already solved, scripted&lt;br /&gt;
and made available.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Dates !! Task !! Deliverables&lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period (April, 23 - May, 14) ||&lt;br /&gt;
Initial research on GDAL, MapServer, SQLAlchemy, GeoAlchemy, relational databases (PostgreSQL, Oracle, Microsoft SQL Server, MySQL, SQLite,...) &lt;br /&gt;
&lt;br /&gt;
Select which databases will be supported in this project.&lt;br /&gt;
&lt;br /&gt;
Set up environment for work - virtual environment with a distribution of Linux, instances of selected database management systems for testing. &lt;br /&gt;
| [https://docs.google.com/document/d/1DzdT0bcAmeU4EsoZlg8jBZmcfx6mIPe4Z8PRwsWzP_U/edit#heading=h.9dmblslll4ai Bonding Period Report]&lt;br /&gt;
|-&lt;br /&gt;
| Week 1 (May, 14 - May, 20) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Define “DbStorage”, an abstract base class that will ensure derived classes implement particular methods from this class. Define abstract methods that are necessary for writing output data to a remote database.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 2 (May, 21 - May, 27) ||&lt;br /&gt;
&lt;br /&gt;
Write test script that checks “PgStorage” will work correctly and write output vector data to a PostgreSQL database.&lt;br /&gt;
&lt;br /&gt;
Develop “PgStorage“ class that inherits from “DbStorage” and implements proposed functionality.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 3 (May, 28 - June, 3) ||&lt;br /&gt;
&lt;br /&gt;
Write a test (or update test written in the previous week) to ensure correct functionality of newly developed classes.&lt;br /&gt;
&lt;br /&gt;
Develop several classes based on selection in week 1 – e.g. “MSSQLStorage”, “OCIStorage”, “MySQLStorage”, etc.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 4 (June, 4 - June, 10) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Develop a mechanism for handling raster output data and implement it in the above-mentioned classes. If GDAL does not support writing raster data to a specific database by default, appropriate tool or library must be identified. For example, for writing raster data into PostgreSQL, ”raster2pgsql“ tool can be used.&lt;br /&gt;
&lt;br /&gt;
Decide how other types of data (such as string, table, CSV, etc.) will be handled and implement it.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 5 (June, 11 - June, 15) Phase 1 Evaluation||&lt;br /&gt;
&lt;br /&gt;
Write a test that checks all data types will get correctly stored in database.&lt;br /&gt;
&lt;br /&gt;
Write and submit weekly report.&lt;br /&gt;
&lt;br /&gt;
Write and submit Phase 1 evaluation.&lt;br /&gt;
&lt;br /&gt;
'''Deliverables for Phase 1:''' Correctly functioning and tested module that enables output data (vector, raster or other) to be stored in one of several database management systems.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 6 (June, 16 - June, 24) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Handle metadata. Currently, logs with information about run processes (such as when a process started and finished) are stored in a SQLite database. Implement a functionality that accesses logs, extracts desired metadata from them and saves them in the same database as output data. Use unique identifier of every process to join metadata (using primary key) with the corresponding output data (foreign key). For each run process, include expiration date to its output data.&lt;br /&gt;
&lt;br /&gt;
Develop a trigger that removes output data when it expires.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 7 (June, 25 - July, 1) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Establish a connection between database and MapServer and allow MapServer to access output data stored in database.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 8 (July, 2 - July, 8) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable output data to be viewed as WMS services through MapServer.&lt;br /&gt;
&lt;br /&gt;
Edit current code so the reference embodied in the responding document is a URL link to a running MapServer service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 9 (July, 9 - July, 13) Phase 2 Evaluation||&lt;br /&gt;
&lt;br /&gt;
Write and submit Phase 2 evaluation.&lt;br /&gt;
&lt;br /&gt;
'''Deliverables for Phase 2''': Correctly functioning and tested module that enables output data to be viewed as a Web Map Service using MapServer.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 10 (July, 14 - July, 22) ||&lt;br /&gt;
&lt;br /&gt;
Update previously developed test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable raster output data to be accessed and/or edited as OGC Web Coverage Service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 11 (July, 23 - July, 29) ||&lt;br /&gt;
&lt;br /&gt;
Update previously developed test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable vector output data to be accessed and/or edited as OGC Web Feature Service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 12 (July, 30 - August, 5) ||&lt;br /&gt;
&lt;br /&gt;
Write a test that ensures newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Develop a demo that demonstrates implemented functionality.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 13 (August, 6 - August, 14)&lt;br /&gt;
&lt;br /&gt;
||Create documentation that can be added to the current PyWPS documentation.&lt;br /&gt;
&lt;br /&gt;
Finalize work, clean code and prepare a pull request(s) to PyWPS GitHub repository.&lt;br /&gt;
&lt;br /&gt;
Write and submit final report.&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Reports ==&lt;br /&gt;
=== Bonding Period ===&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/document/d/1DzdT0bcAmeU4EsoZlg8jBZmcfx6mIPe4Z8PRwsWzP_U/edit#heading=h.9dmblslll4ai Bonding Period Report]&lt;br /&gt;
&lt;br /&gt;
=== Week 1===&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
I defined the first version of “DbStorage”, a class that will allow output data to be stored in one of RDBMSs supported (PostGIS, MS Server, Oracle spatial, SpatiaLite) [1]&lt;br /&gt;
I downloaded PostgreSQL and PostGIS and run it locally on my computer. I tested it functions correctly by using code I had written previously to GSoC [2] that stores output data in PostGIS. I run some of PyWPS test processes and checked output data does get stored in PostGIS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
Implement PGStorage, a class within the DbStorage class that will store output data to PostGIS and returns database name, schema and table as a reference to the client. &lt;br /&gt;
Start working on implementing MSServerStorage, OciStorage and SpatiaLiteStorage.&lt;br /&gt;
Download, run and test SpatiaLite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/45b98e04c428c2e62643a42bbebfedf8efc0603e&lt;br /&gt;
&lt;br /&gt;
[2] https://github.com/ctu-geoforall-lab-projects/bp-pisl-2018-pywps/commit/c364be4888d74b2285e5a348afc6c3fe184fbc64&lt;br /&gt;
&lt;br /&gt;
=== Week 2===&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
Develop and implement PGStorage, a class within the DbStorage class that will store output data to PostGIS and returns database name, schema and table as a reference to the client.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Study materials on Factory design pattern [2] recommended by my mentor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Download, run and test SpatiaLite. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
Develop, implement and test _MSSQLStorage and _OciStorage _MySQLStorage classes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
I have some questions related to work I will be doing next week. I will consult with my mentor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/254b1e5697c0b4781544a6329b52eb4688e60a22&lt;br /&gt;
&lt;br /&gt;
[2]  http://python-3-patterns-idioms-test.readthedocs.io/en/latest/Factory.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Week 3 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Following my mentor's advice, I made a decision that _MSSQLStorage,  _OciStorage _MySQLStorage classes will not be implemented at this stage. There will only be PgStorage and SQLiteStorage that store data in a PostgreSQL and SQLite databases, respectively &lt;br /&gt;
&lt;br /&gt;
- Define DbStorageAbstract, an abstract class from which PgStorage and SQLiteStorage will inherit [1]&lt;br /&gt;
&lt;br /&gt;
- Develop and implement SQLiteStorage [2] &lt;br /&gt;
&lt;br /&gt;
- Fix/Update DbStorage class [3] &lt;br /&gt;
&lt;br /&gt;
- Update outputs.py so complex output data is either stored as files or in a database depending on configuration [4]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Develop a mechanism for handling raster output data and implement it.&lt;br /&gt;
&lt;br /&gt;
- Decide how other types of data (such as string, table, CSV, etc.) will be handled and implement it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
There is an error occuring when I run PyWPS and I haven't been able to find out what is causing it. I will discuss this with my mentor on a call on Monday morning.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/89ab12a2fd883a0df6c070a4ca573f89b6c31a5a&lt;br /&gt;
&lt;br /&gt;
[2]  https://github.com/janpisl/pywps/commit/864d275fe8c47e41c07f8278b8037e80a0b0b838&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/commit/c0d698cefde9a5085cd7d76bb0e32156a6391880 &lt;br /&gt;
&lt;br /&gt;
[4] https://github.com/janpisl/pywps/commit/7f00fa06ac5fd7823d79a363f6163dcc38e7bbb0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Week 4 report === &lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
-I changed the structure of the code. Classes PgStorage and SQLiteStorage are now stored in separate files in the db folder. FileStorage is in a separate file, too. Rest of the code is in the __init__ files. [1]&lt;br /&gt;
&lt;br /&gt;
- I added the data_type attribute to inout/formats/__init__.py. At the moment, allowed values are either vector or raster using the enum module. This was done so when storing output data it can be differed between raster and vector data and appropriate method can be used. [2]&lt;br /&gt;
&lt;br /&gt;
- The Dbstorage class has been simplified. Instead of creating an instance of the class in outputs.py and calling the get_db_type method in the constructor, get_db_type is now a static method and gets called directly in outputs.py [3]&lt;br /&gt;
&lt;br /&gt;
- PgStorage accesses the data_type value and calls appropriate method (store_vector_output or store_raster_output) [4]&lt;br /&gt;
&lt;br /&gt;
- I implemented the store_raster_output method in the PgStorage class [5]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Implement store_raster_output for SQLiteStorage&lt;br /&gt;
&lt;br /&gt;
- Implement another method for storing other types of data (string, CSV, etc.)&lt;br /&gt;
&lt;br /&gt;
- Write a script that tests whether different data types get stored correctly&lt;br /&gt;
&lt;br /&gt;
- Submit the Phase 1 evaluation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/18c46864ff75fb01e3c7d76f3f4a1b6d2457a22f[[2]  https://github.com/janpisl/pywps/commit/4bb079bfcde0b4fcc42393f531e86c47a91507d4&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/commit/80c61c92e183c06af741fe94d0b172f9a5940609&lt;br /&gt;
&lt;br /&gt;
[4] https://github.com/janpisl/pywps/commit/e024b1e5d1eb8df1a79989a59b14276b2757d98d&lt;br /&gt;
&lt;br /&gt;
[5] https://github.com/janpisl/pywps/commit/a09dfc61729b36eb81ddd0d9adb5bda2effe3029&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Google Summer of Code]]&lt;/div&gt;</summary>
		<author><name>Wiki-Janpisl</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Database_Output_Storage_for_PyWPS&amp;diff=115205</id>
		<title>Database Output Storage for PyWPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Database_Output_Storage_for_PyWPS&amp;diff=115205"/>
		<updated>2018-06-04T07:01:19Z</updated>

		<summary type="html">&lt;p&gt;Wiki-Janpisl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
My name is Jan Pisl and I study at the Czech Technical University in Prague. I will be participating in this year's GSoC. My project’s aim is to develop database storage support for PyWPS that would allow output data to be stored in a database in a way that is compliant with the OGC WPS Standard. I will be using Python 3.6. &lt;br /&gt;
&lt;br /&gt;
== Project ==&lt;br /&gt;
Title: Database Output Storage for PyWPS&lt;br /&gt;
&lt;br /&gt;
Student: Jan Pišl&lt;br /&gt;
&lt;br /&gt;
Mentors: [[User:Jachym|Jáchym Čepický]], [[User:Martinl|Martin Landa]].&lt;br /&gt;
&lt;br /&gt;
Project's repositories: [https://github.com/janpisl/pywps GitHub repository], [https://summerofcode.withgoogle.com/projects/#5084513521106944 Project's page on GSoC website] &lt;br /&gt;
&lt;br /&gt;
== Technology ==&lt;br /&gt;
&lt;br /&gt;
=== PyWPS ===&lt;br /&gt;
PyWPS is a server side implementation of the OGC Web Processing Service (OGC&lt;br /&gt;
WPS) standards 1.0.0. It is written in the Python programming language, it runs&lt;br /&gt;
on Python 2.7, 3.3 or higher and it is tested and developed on Linux. It uses&lt;br /&gt;
a ConfigParser format for configuration files. It supports a variety of geospatial&lt;br /&gt;
software and tools such as GRASS GIS, R Project or the GDAL library. Synchronous&lt;br /&gt;
and asynchronuous invocations are supported. As for request encoding, two options&lt;br /&gt;
are available - key-value pairs (using HTTP-GET) or XML payload (using HTTPPOST).&lt;br /&gt;
Every process that is to be deployed on the server is defined as a class&lt;br /&gt;
and has several mandatory parameters. The key parameter called &amp;quot;handler&amp;quot; gets&lt;br /&gt;
invoked every time there is an incoming request, it accepts the request and returns&lt;br /&gt;
a response.&lt;br /&gt;
&lt;br /&gt;
In 2016, it upgraded from PyWPS 3 to PyWPS 4. Some of the more significant&lt;br /&gt;
changes include every input being considered a list of inputs and all inputs having&lt;br /&gt;
file, data and stream attributes. These attributes allow better manipulation&lt;br /&gt;
with data.&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&lt;br /&gt;
Python is a high-level programming language that fully supports object-oriented and&lt;br /&gt;
structured programming. Developed in the late 1980s, the first version 0.9.0 was&lt;br /&gt;
released in 1991. In 2008, Python 3.0 was released. Currently, the most up-to-date&lt;br /&gt;
version available is 3.6.&lt;br /&gt;
It was designed as a syntactically simple language, using whitespace intendantion&lt;br /&gt;
instead of brackets and English words rather than punctuation. It is a dynamicallytyped&lt;br /&gt;
language, which means it is not neccessary to specify a data-type when defining&lt;br /&gt;
a variable. For its simplicity and readability, Python is often considered a good&lt;br /&gt;
first programming language to learn.&lt;br /&gt;
One of the key advantages of Python is its high extensibility. It provides large&lt;br /&gt;
standard libraries and also an extensive number of other modules, packages and&lt;br /&gt;
libraries, so most of the common programming tasks are already solved, scripted&lt;br /&gt;
and made available.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Dates !! Task !! Deliverables&lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period (April, 23 - May, 14) ||&lt;br /&gt;
Initial research on GDAL, MapServer, SQLAlchemy, GeoAlchemy, relational databases (PostgreSQL, Oracle, Microsoft SQL Server, MySQL, SQLite,...) &lt;br /&gt;
&lt;br /&gt;
Select which databases will be supported in this project.&lt;br /&gt;
&lt;br /&gt;
Set up environment for work - virtual environment with a distribution of Linux, instances of selected database management systems for testing. &lt;br /&gt;
| [https://docs.google.com/document/d/1DzdT0bcAmeU4EsoZlg8jBZmcfx6mIPe4Z8PRwsWzP_U/edit#heading=h.9dmblslll4ai Bonding Period Report]&lt;br /&gt;
|-&lt;br /&gt;
| Week 1 (May, 14 - May, 20) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Define “DbStorage”, an abstract base class that will ensure derived classes implement particular methods from this class. Define abstract methods that are necessary for writing output data to a remote database.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 2 (May, 21 - May, 27) ||&lt;br /&gt;
&lt;br /&gt;
Write test script that checks “PgStorage” will work correctly and write output vector data to a PostgreSQL database.&lt;br /&gt;
&lt;br /&gt;
Develop “PgStorage“ class that inherits from “DbStorage” and implements proposed functionality.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 3 (May, 28 - June, 3) ||&lt;br /&gt;
&lt;br /&gt;
Write a test (or update test written in the previous week) to ensure correct functionality of newly developed classes.&lt;br /&gt;
&lt;br /&gt;
Develop several classes based on selection in week 1 – e.g. “MSSQLStorage”, “OCIStorage”, “MySQLStorage”, etc.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 4 (June, 4 - June, 10) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Develop a mechanism for handling raster output data and implement it in the above-mentioned classes. If GDAL does not support writing raster data to a specific database by default, appropriate tool or library must be identified. For example, for writing raster data into PostgreSQL, ”raster2pgsql“ tool can be used.&lt;br /&gt;
&lt;br /&gt;
Decide how other types of data (such as string, table, CSV, etc.) will be handled and implement it.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 5 (June, 11 - June, 15) Phase 1 Evaluation||&lt;br /&gt;
&lt;br /&gt;
Write a test that checks all data types will get correctly stored in database.&lt;br /&gt;
&lt;br /&gt;
Write and submit weekly report.&lt;br /&gt;
&lt;br /&gt;
Write and submit Phase 1 evaluation.&lt;br /&gt;
&lt;br /&gt;
'''Deliverables for Phase 1:''' Correctly functioning and tested module that enables output data (vector, raster or other) to be stored in one of several database management systems.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 6 (June, 16 - June, 24) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Handle metadata. Currently, logs with information about run processes (such as when a process started and finished) are stored in a SQLite database. Implement a functionality that accesses logs, extracts desired metadata from them and saves them in the same database as output data. Use unique identifier of every process to join metadata (using primary key) with the corresponding output data (foreign key). For each run process, include expiration date to its output data.&lt;br /&gt;
&lt;br /&gt;
Develop a trigger that removes output data when it expires.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 7 (June, 25 - July, 1) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Establish a connection between database and MapServer and allow MapServer to access output data stored in database.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 8 (July, 2 - July, 8) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable output data to be viewed as WMS services through MapServer.&lt;br /&gt;
&lt;br /&gt;
Edit current code so the reference embodied in the responding document is a URL link to a running MapServer service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 9 (July, 9 - July, 13) Phase 2 Evaluation||&lt;br /&gt;
&lt;br /&gt;
Write and submit Phase 2 evaluation.&lt;br /&gt;
&lt;br /&gt;
'''Deliverables for Phase 2''': Correctly functioning and tested module that enables output data to be viewed as a Web Map Service using MapServer.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 10 (July, 14 - July, 22) ||&lt;br /&gt;
&lt;br /&gt;
Update previously developed test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable raster output data to be accessed and/or edited as OGC Web Coverage Service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 11 (July, 23 - July, 29) ||&lt;br /&gt;
&lt;br /&gt;
Update previously developed test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable vector output data to be accessed and/or edited as OGC Web Feature Service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 12 (July, 30 - August, 5) ||&lt;br /&gt;
&lt;br /&gt;
Write a test that ensures newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Develop a demo that demonstrates implemented functionality.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 13 (August, 6 - August, 14)&lt;br /&gt;
&lt;br /&gt;
||Create documentation that can be added to the current PyWPS documentation.&lt;br /&gt;
&lt;br /&gt;
Finalize work, clean code and prepare a pull request(s) to PyWPS GitHub repository.&lt;br /&gt;
&lt;br /&gt;
Write and submit final report.&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Reports ==&lt;br /&gt;
=== Bonding Period ===&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/document/d/1DzdT0bcAmeU4EsoZlg8jBZmcfx6mIPe4Z8PRwsWzP_U/edit#heading=h.9dmblslll4ai Bonding Period Report]&lt;br /&gt;
&lt;br /&gt;
=== Week 1===&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
I defined the first version of “DbStorage”, a class that will allow output data to be stored in one of RDBMSs supported (PostGIS, MS Server, Oracle spatial, SpatiaLite) [1]&lt;br /&gt;
I downloaded PostgreSQL and PostGIS and run it locally on my computer. I tested it functions correctly by using code I had written previously to GSoC [2] that stores output data in PostGIS. I run some of PyWPS test processes and checked output data does get stored in PostGIS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
Implement PGStorage, a class within the DbStorage class that will store output data to PostGIS and returns database name, schema and table as a reference to the client. &lt;br /&gt;
Start working on implementing MSServerStorage, OciStorage and SpatiaLiteStorage.&lt;br /&gt;
Download, run and test SpatiaLite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/45b98e04c428c2e62643a42bbebfedf8efc0603e&lt;br /&gt;
&lt;br /&gt;
[2] https://github.com/ctu-geoforall-lab-projects/bp-pisl-2018-pywps/commit/c364be4888d74b2285e5a348afc6c3fe184fbc64&lt;br /&gt;
&lt;br /&gt;
=== Week 2===&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
Develop and implement PGStorage, a class within the DbStorage class that will store output data to PostGIS and returns database name, schema and table as a reference to the client.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Study materials on Factory design pattern [2] recommended by my mentor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Download, run and test SpatiaLite. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
Develop, implement and test _MSSQLStorage and _OciStorage _MySQLStorage classes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
I have some questions related to work I will be doing next week. I will consult with my mentor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/254b1e5697c0b4781544a6329b52eb4688e60a22&lt;br /&gt;
&lt;br /&gt;
[2]  http://python-3-patterns-idioms-test.readthedocs.io/en/latest/Factory.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Week 3 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Following my mentor's advice, I made a decision that _MSSQLStorage,  _OciStorage _MySQLStorage classes will not be implemented at this stage. There will only be PgStorage and SQLiteStorage that store data in a PostgreSQL and SQLite databases, respectively &lt;br /&gt;
&lt;br /&gt;
- Define DbStorageAbstract, an abstract class from which PgStorage and SQLiteStorage will inherit [1]&lt;br /&gt;
&lt;br /&gt;
- Develop and implement SQLiteStorage [2] &lt;br /&gt;
&lt;br /&gt;
- Fix/Update DbStorage class [3] &lt;br /&gt;
&lt;br /&gt;
- Update outputs.py so complex output data is either stored as files or in a database depending on configuration [4]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Develop a mechanism for handling raster output data and implement it.&lt;br /&gt;
&lt;br /&gt;
- Decide how other types of data (such as string, table, CSV, etc.) will be handled and implement it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
There is an error occuring when I run PyWPS and I haven't been able to find out what is causing it. I will discuss this with my mentor on a call on Monday morning.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/89ab12a2fd883a0df6c070a4ca573f89b6c31a5a&lt;br /&gt;
&lt;br /&gt;
[2]  https://github.com/janpisl/pywps/commit/864d275fe8c47e41c07f8278b8037e80a0b0b838&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/commit/c0d698cefde9a5085cd7d76bb0e32156a6391880 &lt;br /&gt;
&lt;br /&gt;
[4] https://github.com/janpisl/pywps/commit/7f00fa06ac5fd7823d79a363f6163dcc38e7bbb0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Google Summer of Code]]&lt;/div&gt;</summary>
		<author><name>Wiki-Janpisl</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Database_Output_Storage_for_PyWPS&amp;diff=115202</id>
		<title>Database Output Storage for PyWPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Database_Output_Storage_for_PyWPS&amp;diff=115202"/>
		<updated>2018-06-03T19:39:40Z</updated>

		<summary type="html">&lt;p&gt;Wiki-Janpisl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
My name is Jan Pisl and I study at the Czech Technical University in Prague. I will be participating in this year's GSoC. My project’s aim is to develop database storage support for PyWPS that would allow output data to be stored in a database in a way that is compliant with the OGC WPS Standard. I will be using Python 3.6. &lt;br /&gt;
&lt;br /&gt;
== Project ==&lt;br /&gt;
Title: Database Output Storage for PyWPS&lt;br /&gt;
&lt;br /&gt;
Student: Jan Pišl&lt;br /&gt;
&lt;br /&gt;
Mentors: [[User:Jachym|Jáchym Čepický]], [[User:Martinl|Martin Landa]].&lt;br /&gt;
&lt;br /&gt;
Project's repositories: [https://github.com/janpisl/Database-Output-Storage-for-PyWPS GitHub repository], [https://summerofcode.withgoogle.com/projects/#5084513521106944 Project's page on GSoC website] &lt;br /&gt;
&lt;br /&gt;
== Technology ==&lt;br /&gt;
&lt;br /&gt;
=== PyWPS ===&lt;br /&gt;
PyWPS is a server side implementation of the OGC Web Processing Service (OGC&lt;br /&gt;
WPS) standards 1.0.0. It is written in the Python programming language, it runs&lt;br /&gt;
on Python 2.7, 3.3 or higher and it is tested and developed on Linux. It uses&lt;br /&gt;
a ConfigParser format for configuration files. It supports a variety of geospatial&lt;br /&gt;
software and tools such as GRASS GIS, R Project or the GDAL library. Synchronous&lt;br /&gt;
and asynchronuous invocations are supported. As for request encoding, two options&lt;br /&gt;
are available - key-value pairs (using HTTP-GET) or XML payload (using HTTPPOST).&lt;br /&gt;
Every process that is to be deployed on the server is defined as a class&lt;br /&gt;
and has several mandatory parameters. The key parameter called &amp;quot;handler&amp;quot; gets&lt;br /&gt;
invoked every time there is an incoming request, it accepts the request and returns&lt;br /&gt;
a response.&lt;br /&gt;
&lt;br /&gt;
In 2016, it upgraded from PyWPS 3 to PyWPS 4. Some of the more significant&lt;br /&gt;
changes include every input being considered a list of inputs and all inputs having&lt;br /&gt;
file, data and stream attributes. These attributes allow better manipulation&lt;br /&gt;
with data.&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&lt;br /&gt;
Python is a high-level programming language that fully supports object-oriented and&lt;br /&gt;
structured programming. Developed in the late 1980s, the first version 0.9.0 was&lt;br /&gt;
released in 1991. In 2008, Python 3.0 was released. Currently, the most up-to-date&lt;br /&gt;
version available is 3.6.&lt;br /&gt;
It was designed as a syntactically simple language, using whitespace intendantion&lt;br /&gt;
instead of brackets and English words rather than punctuation. It is a dynamicallytyped&lt;br /&gt;
language, which means it is not neccessary to specify a data-type when defining&lt;br /&gt;
a variable. For its simplicity and readability, Python is often considered a good&lt;br /&gt;
first programming language to learn.&lt;br /&gt;
One of the key advantages of Python is its high extensibility. It provides large&lt;br /&gt;
standard libraries and also an extensive number of other modules, packages and&lt;br /&gt;
libraries, so most of the common programming tasks are already solved, scripted&lt;br /&gt;
and made available.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Dates !! Task !! Deliverables&lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period (April, 23 - May, 14) ||&lt;br /&gt;
Initial research on GDAL, MapServer, SQLAlchemy, GeoAlchemy, relational databases (PostgreSQL, Oracle, Microsoft SQL Server, MySQL, SQLite,...) &lt;br /&gt;
&lt;br /&gt;
Select which databases will be supported in this project.&lt;br /&gt;
&lt;br /&gt;
Set up environment for work - virtual environment with a distribution of Linux, instances of selected database management systems for testing. &lt;br /&gt;
| [https://docs.google.com/document/d/1DzdT0bcAmeU4EsoZlg8jBZmcfx6mIPe4Z8PRwsWzP_U/edit#heading=h.9dmblslll4ai Bonding Period Report]&lt;br /&gt;
|-&lt;br /&gt;
| Week 1 (May, 14 - May, 20) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Define “DbStorage”, an abstract base class that will ensure derived classes implement particular methods from this class. Define abstract methods that are necessary for writing output data to a remote database.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 2 (May, 21 - May, 27) ||&lt;br /&gt;
&lt;br /&gt;
Write test script that checks “PgStorage” will work correctly and write output vector data to a PostgreSQL database.&lt;br /&gt;
&lt;br /&gt;
Develop “PgStorage“ class that inherits from “DbStorage” and implements proposed functionality.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 3 (May, 28 - June, 3) ||&lt;br /&gt;
&lt;br /&gt;
Write a test (or update test written in the previous week) to ensure correct functionality of newly developed classes.&lt;br /&gt;
&lt;br /&gt;
Develop several classes based on selection in week 1 – e.g. “MSSQLStorage”, “OCIStorage”, “MySQLStorage”, etc.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 4 (June, 4 - June, 10) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Develop a mechanism for handling raster output data and implement it in the above-mentioned classes. If GDAL does not support writing raster data to a specific database by default, appropriate tool or library must be identified. For example, for writing raster data into PostgreSQL, ”raster2pgsql“ tool can be used.&lt;br /&gt;
&lt;br /&gt;
Decide how other types of data (such as string, table, CSV, etc.) will be handled and implement it.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 5 (June, 11 - June, 15) Phase 1 Evaluation||&lt;br /&gt;
&lt;br /&gt;
Write a test that checks all data types will get correctly stored in database.&lt;br /&gt;
&lt;br /&gt;
Write and submit weekly report.&lt;br /&gt;
&lt;br /&gt;
Write and submit Phase 1 evaluation.&lt;br /&gt;
&lt;br /&gt;
'''Deliverables for Phase 1:''' Correctly functioning and tested module that enables output data (vector, raster or other) to be stored in one of several database management systems.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 6 (June, 16 - June, 24) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Handle metadata. Currently, logs with information about run processes (such as when a process started and finished) are stored in a SQLite database. Implement a functionality that accesses logs, extracts desired metadata from them and saves them in the same database as output data. Use unique identifier of every process to join metadata (using primary key) with the corresponding output data (foreign key). For each run process, include expiration date to its output data.&lt;br /&gt;
&lt;br /&gt;
Develop a trigger that removes output data when it expires.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 7 (June, 25 - July, 1) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Establish a connection between database and MapServer and allow MapServer to access output data stored in database.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 8 (July, 2 - July, 8) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable output data to be viewed as WMS services through MapServer.&lt;br /&gt;
&lt;br /&gt;
Edit current code so the reference embodied in the responding document is a URL link to a running MapServer service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 9 (July, 9 - July, 13) Phase 2 Evaluation||&lt;br /&gt;
&lt;br /&gt;
Write and submit Phase 2 evaluation.&lt;br /&gt;
&lt;br /&gt;
'''Deliverables for Phase 2''': Correctly functioning and tested module that enables output data to be viewed as a Web Map Service using MapServer.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 10 (July, 14 - July, 22) ||&lt;br /&gt;
&lt;br /&gt;
Update previously developed test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable raster output data to be accessed and/or edited as OGC Web Coverage Service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 11 (July, 23 - July, 29) ||&lt;br /&gt;
&lt;br /&gt;
Update previously developed test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable vector output data to be accessed and/or edited as OGC Web Feature Service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 12 (July, 30 - August, 5) ||&lt;br /&gt;
&lt;br /&gt;
Write a test that ensures newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Develop a demo that demonstrates implemented functionality.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 13 (August, 6 - August, 14)&lt;br /&gt;
&lt;br /&gt;
||Create documentation that can be added to the current PyWPS documentation.&lt;br /&gt;
&lt;br /&gt;
Finalize work, clean code and prepare a pull request(s) to PyWPS GitHub repository.&lt;br /&gt;
&lt;br /&gt;
Write and submit final report.&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Reports ==&lt;br /&gt;
=== Bonding Period ===&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/document/d/1DzdT0bcAmeU4EsoZlg8jBZmcfx6mIPe4Z8PRwsWzP_U/edit#heading=h.9dmblslll4ai Bonding Period Report]&lt;br /&gt;
&lt;br /&gt;
=== Week 1===&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
I defined the first version of “DbStorage”, a class that will allow output data to be stored in one of RDBMSs supported (PostGIS, MS Server, Oracle spatial, SpatiaLite) [1]&lt;br /&gt;
I downloaded PostgreSQL and PostGIS and run it locally on my computer. I tested it functions correctly by using code I had written previously to GSoC [2] that stores output data in PostGIS. I run some of PyWPS test processes and checked output data does get stored in PostGIS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
Implement PGStorage, a class within the DbStorage class that will store output data to PostGIS and returns database name, schema and table as a reference to the client. &lt;br /&gt;
Start working on implementing MSServerStorage, OciStorage and SpatiaLiteStorage.&lt;br /&gt;
Download, run and test SpatiaLite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/45b98e04c428c2e62643a42bbebfedf8efc0603e&lt;br /&gt;
&lt;br /&gt;
[2] https://github.com/ctu-geoforall-lab-projects/bp-pisl-2018-pywps/commit/c364be4888d74b2285e5a348afc6c3fe184fbc64&lt;br /&gt;
&lt;br /&gt;
=== Week 2===&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
Develop and implement PGStorage, a class within the DbStorage class that will store output data to PostGIS and returns database name, schema and table as a reference to the client.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Study materials on Factory design pattern [2] recommended by my mentor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Download, run and test SpatiaLite. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
Develop, implement and test _MSSQLStorage and _OciStorage _MySQLStorage classes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
I have some questions related to work I will be doing next week. I will consult with my mentor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/254b1e5697c0b4781544a6329b52eb4688e60a22&lt;br /&gt;
&lt;br /&gt;
[2]  http://python-3-patterns-idioms-test.readthedocs.io/en/latest/Factory.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Week 3 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Following my mentor's advice, I made a decision that _MSSQLStorage,  _OciStorage _MySQLStorage classes will not be implemented at this stage. There will only be PgStorage and SQLiteStorage that store data in a PostgreSQL and SQLite databases, respectively &lt;br /&gt;
&lt;br /&gt;
- Define DbStorageAbstract, an abstract class from which PgStorage and SQLiteStorage will inherit [1]&lt;br /&gt;
&lt;br /&gt;
- Develop and implement SQLiteStorage [2] &lt;br /&gt;
&lt;br /&gt;
- Fix/Update DbStorage class [3] &lt;br /&gt;
&lt;br /&gt;
- Update outputs.py so complex output data is either stored as files or in a database depending on configuration [4]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Develop a mechanism for handling raster output data and implement it.&lt;br /&gt;
&lt;br /&gt;
- Decide how other types of data (such as string, table, CSV, etc.) will be handled and implement it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
There is an error occuring when I run PyWPS and I haven't been able to find out what is causing it. I will discuss this with my mentor on a call on Monday morning.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/89ab12a2fd883a0df6c070a4ca573f89b6c31a5a&lt;br /&gt;
&lt;br /&gt;
[2]  https://github.com/janpisl/pywps/commit/864d275fe8c47e41c07f8278b8037e80a0b0b838&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/commit/c0d698cefde9a5085cd7d76bb0e32156a6391880 &lt;br /&gt;
&lt;br /&gt;
[4] https://github.com/janpisl/pywps/commit/7f00fa06ac5fd7823d79a363f6163dcc38e7bbb0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Google Summer of Code]]&lt;/div&gt;</summary>
		<author><name>Wiki-Janpisl</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Database_Output_Storage_for_PyWPS&amp;diff=115199</id>
		<title>Database Output Storage for PyWPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Database_Output_Storage_for_PyWPS&amp;diff=115199"/>
		<updated>2018-06-03T17:20:07Z</updated>

		<summary type="html">&lt;p&gt;Wiki-Janpisl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
My name is Jan Pisl and I study at the Czech Technical University in Prague. I will be participating in this year's GSoC. My project’s aim is to develop database storage support for PyWPS that would allow output data to be stored in a database in a way that is compliant with the OGC WPS Standard. I will be using Python 3.6. &lt;br /&gt;
&lt;br /&gt;
== Project ==&lt;br /&gt;
Title: Database Output Storage for PyWPS&lt;br /&gt;
&lt;br /&gt;
Student: Jan Pišl&lt;br /&gt;
&lt;br /&gt;
Mentors: [[User:Jachym|Jáchym Čepický]], [[User:Martinl|Martin Landa]].&lt;br /&gt;
&lt;br /&gt;
Project's repositories: [https://github.com/janpisl/Database-Output-Storage-for-PyWPS GitHub repository], [https://summerofcode.withgoogle.com/projects/#5084513521106944 Project's page on GSoC website] &lt;br /&gt;
&lt;br /&gt;
== Technology ==&lt;br /&gt;
&lt;br /&gt;
=== PyWPS ===&lt;br /&gt;
PyWPS is a server side implementation of the OGC Web Processing Service (OGC&lt;br /&gt;
WPS) standards 1.0.0. It is written in the Python programming language, it runs&lt;br /&gt;
on Python 2.7, 3.3 or higher and it is tested and developed on Linux. It uses&lt;br /&gt;
a ConfigParser format for configuration files. It supports a variety of geospatial&lt;br /&gt;
software and tools such as GRASS GIS, R Project or the GDAL library. Synchronous&lt;br /&gt;
and asynchronuous invocations are supported. As for request encoding, two options&lt;br /&gt;
are available - key-value pairs (using HTTP-GET) or XML payload (using HTTPPOST).&lt;br /&gt;
Every process that is to be deployed on the server is defined as a class&lt;br /&gt;
and has several mandatory parameters. The key parameter called &amp;quot;handler&amp;quot; gets&lt;br /&gt;
invoked every time there is an incoming request, it accepts the request and returns&lt;br /&gt;
a response.&lt;br /&gt;
&lt;br /&gt;
In 2016, it upgraded from PyWPS 3 to PyWPS 4. Some of the more significant&lt;br /&gt;
changes include every input being considered a list of inputs and all inputs having&lt;br /&gt;
file, data and stream attributes. These attributes allow better manipulation&lt;br /&gt;
with data.&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&lt;br /&gt;
Python is a high-level programming language that fully supports object-oriented and&lt;br /&gt;
structured programming. Developed in the late 1980s, the first version 0.9.0 was&lt;br /&gt;
released in 1991. In 2008, Python 3.0 was released. Currently, the most up-to-date&lt;br /&gt;
version available is 3.6.&lt;br /&gt;
It was designed as a syntactically simple language, using whitespace intendantion&lt;br /&gt;
instead of brackets and English words rather than punctuation. It is a dynamicallytyped&lt;br /&gt;
language, which means it is not neccessary to specify a data-type when defining&lt;br /&gt;
a variable. For its simplicity and readability, Python is often considered a good&lt;br /&gt;
first programming language to learn.&lt;br /&gt;
One of the key advantages of Python is its high extensibility. It provides large&lt;br /&gt;
standard libraries and also an extensive number of other modules, packages and&lt;br /&gt;
libraries, so most of the common programming tasks are already solved, scripted&lt;br /&gt;
and made available.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Dates !! Task !! Deliverables&lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period (April, 23 - May, 14) ||&lt;br /&gt;
Initial research on GDAL, MapServer, SQLAlchemy, GeoAlchemy, relational databases (PostgreSQL, Oracle, Microsoft SQL Server, MySQL, SQLite,...) &lt;br /&gt;
&lt;br /&gt;
Select which databases will be supported in this project.&lt;br /&gt;
&lt;br /&gt;
Set up environment for work - virtual environment with a distribution of Linux, instances of selected database management systems for testing. &lt;br /&gt;
| [https://docs.google.com/document/d/1DzdT0bcAmeU4EsoZlg8jBZmcfx6mIPe4Z8PRwsWzP_U/edit#heading=h.9dmblslll4ai Bonding Period Report]&lt;br /&gt;
|-&lt;br /&gt;
| Week 1 (May, 14 - May, 20) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Define “DbStorage”, an abstract base class that will ensure derived classes implement particular methods from this class. Define abstract methods that are necessary for writing output data to a remote database.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 2 (May, 21 - May, 27) ||&lt;br /&gt;
&lt;br /&gt;
Write test script that checks “PgStorage” will work correctly and write output vector data to a PostgreSQL database.&lt;br /&gt;
&lt;br /&gt;
Develop “PgStorage“ class that inherits from “DbStorage” and implements proposed functionality.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 3 (May, 28 - June, 3) ||&lt;br /&gt;
&lt;br /&gt;
Write a test (or update test written in the previous week) to ensure correct functionality of newly developed classes.&lt;br /&gt;
&lt;br /&gt;
Develop several classes based on selection in week 1 – e.g. “MSSQLStorage”, “OCIStorage”, “MySQLStorage”, etc.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 4 (June, 4 - June, 10) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Develop a mechanism for handling raster output data and implement it in the above-mentioned classes. If GDAL does not support writing raster data to a specific database by default, appropriate tool or library must be identified. For example, for writing raster data into PostgreSQL, ”raster2pgsql“ tool can be used.&lt;br /&gt;
&lt;br /&gt;
Decide how other types of data (such as string, table, CSV, etc.) will be handled and implement it.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 5 (June, 11 - June, 15) Phase 1 Evaluation||&lt;br /&gt;
&lt;br /&gt;
Write a test that checks all data types will get correctly stored in database.&lt;br /&gt;
&lt;br /&gt;
Write and submit weekly report.&lt;br /&gt;
&lt;br /&gt;
Write and submit Phase 1 evaluation.&lt;br /&gt;
&lt;br /&gt;
'''Deliverables for Phase 1:''' Correctly functioning and tested module that enables output data (vector, raster or other) to be stored in one of several database management systems.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 6 (June, 16 - June, 24) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Handle metadata. Currently, logs with information about run processes (such as when a process started and finished) are stored in a SQLite database. Implement a functionality that accesses logs, extracts desired metadata from them and saves them in the same database as output data. Use unique identifier of every process to join metadata (using primary key) with the corresponding output data (foreign key). For each run process, include expiration date to its output data.&lt;br /&gt;
&lt;br /&gt;
Develop a trigger that removes output data when it expires.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 7 (June, 25 - July, 1) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Establish a connection between database and MapServer and allow MapServer to access output data stored in database.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 8 (July, 2 - July, 8) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable output data to be viewed as WMS services through MapServer.&lt;br /&gt;
&lt;br /&gt;
Edit current code so the reference embodied in the responding document is a URL link to a running MapServer service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 9 (July, 9 - July, 13) Phase 2 Evaluation||&lt;br /&gt;
&lt;br /&gt;
Write and submit Phase 2 evaluation.&lt;br /&gt;
&lt;br /&gt;
'''Deliverables for Phase 2''': Correctly functioning and tested module that enables output data to be viewed as a Web Map Service using MapServer.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 10 (July, 14 - July, 22) ||&lt;br /&gt;
&lt;br /&gt;
Update previously developed test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable raster output data to be accessed and/or edited as OGC Web Coverage Service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 11 (July, 23 - July, 29) ||&lt;br /&gt;
&lt;br /&gt;
Update previously developed test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable vector output data to be accessed and/or edited as OGC Web Feature Service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 12 (July, 30 - August, 5) ||&lt;br /&gt;
&lt;br /&gt;
Write a test that ensures newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Develop a demo that demonstrates implemented functionality.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 13 (August, 6 - August, 14)&lt;br /&gt;
&lt;br /&gt;
||Create documentation that can be added to the current PyWPS documentation.&lt;br /&gt;
&lt;br /&gt;
Finalize work, clean code and prepare a pull request(s) to PyWPS GitHub repository.&lt;br /&gt;
&lt;br /&gt;
Write and submit final report.&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Reports ==&lt;br /&gt;
=== Bonding Period ===&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/document/d/1DzdT0bcAmeU4EsoZlg8jBZmcfx6mIPe4Z8PRwsWzP_U/edit#heading=h.9dmblslll4ai Bonding Period Report]&lt;br /&gt;
&lt;br /&gt;
=== Week 1===&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
I defined the first version of “DbStorage”, a class that will allow output data to be stored in one of RDBMSs supported (PostGIS, MS Server, Oracle spatial, SpatiaLite) [1]&lt;br /&gt;
I downloaded PostgreSQL and PostGIS and run it locally on my computer. I tested it functions correctly by using code I had written previously to GSoC [2] that stores output data in PostGIS. I run some of PyWPS test processes and checked output data does get stored in PostGIS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
Implement PGStorage, a class within the DbStorage class that will store output data to PostGIS and returns database name, schema and table as a reference to the client. &lt;br /&gt;
Start working on implementing MSServerStorage, OciStorage and SpatiaLiteStorage.&lt;br /&gt;
Download, run and test SpatiaLite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/45b98e04c428c2e62643a42bbebfedf8efc0603e&lt;br /&gt;
&lt;br /&gt;
[2] https://github.com/ctu-geoforall-lab-projects/bp-pisl-2018-pywps/commit/c364be4888d74b2285e5a348afc6c3fe184fbc64&lt;br /&gt;
&lt;br /&gt;
=== Week 2===&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
Develop and implement PGStorage, a class within the DbStorage class that will store output data to PostGIS and returns database name, schema and table as a reference to the client.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Study materials on Factory design pattern [2] recommended by my mentor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Download, run and test SpatiaLite. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
Develop, implement and test _MSSQLStorage and _OciStorage _MySQLStorage classes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
I have some questions related to work I will be doing next week. I will consult with my mentor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[0] https://wiki.osgeo.org/wiki/Database_Output_Storage_for_PyWPS&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/254b1e5697c0b4781544a6329b52eb4688e60a22&lt;br /&gt;
&lt;br /&gt;
[2]  http://python-3-patterns-idioms-test.readthedocs.io/en/latest/Factory.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Week 3 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Following my mentor's advice, I made a decision that _MSSQLStorage,  _OciStorage _MySQLStorage classes will not be implemented at this stage. There will only be PgStorage and SQLiteStorage that store data in a PostgreSQL and SQLite databases, respectively &lt;br /&gt;
&lt;br /&gt;
- Define DbStorageAbstract, an abstract class from which PgStorage and SQLiteStorage will inherit [1]&lt;br /&gt;
&lt;br /&gt;
- Develop and implement SQLiteStorage [2] &lt;br /&gt;
&lt;br /&gt;
- Fix/Update DbStorage class [3] &lt;br /&gt;
&lt;br /&gt;
- Update outputs.py so complex output data is either stored as files or in a database depending on configuration [4]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
- Develop a mechanism for handling raster output data and implement it.&lt;br /&gt;
&lt;br /&gt;
- Decide how other types of data (such as string, table, CSV, etc.) will be handled and implement it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
There is an error occuring when I run PyWPS and I haven't been able to find out what is causing it. I will discuss this with my mentor on a call on Monday morning.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[0] https://wiki.osgeo.org/wiki/Database_Output_Storage_for_PyWPS&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/89ab12a2fd883a0df6c070a4ca573f89b6c31a5a&lt;br /&gt;
&lt;br /&gt;
[2]  https://github.com/janpisl/pywps/commit/864d275fe8c47e41c07f8278b8037e80a0b0b838&lt;br /&gt;
&lt;br /&gt;
[3] https://github.com/janpisl/pywps/commit/c0d698cefde9a5085cd7d76bb0e32156a6391880 &lt;br /&gt;
&lt;br /&gt;
[4] https://github.com/janpisl/pywps/commit/7f00fa06ac5fd7823d79a363f6163dcc38e7bbb0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Google Summer of Code]]&lt;/div&gt;</summary>
		<author><name>Wiki-Janpisl</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Database_Output_Storage_for_PyWPS&amp;diff=115085</id>
		<title>Database Output Storage for PyWPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Database_Output_Storage_for_PyWPS&amp;diff=115085"/>
		<updated>2018-05-27T18:06:23Z</updated>

		<summary type="html">&lt;p&gt;Wiki-Janpisl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
My name is Jan Pisl and I study at the Czech Technical University in Prague. I will be participating in this year's GSoC. My project’s aim is to develop database storage support for PyWPS that would allow output data to be stored in a database in a way that is compliant with the OGC WPS Standard. I will be using Python 3.6. &lt;br /&gt;
&lt;br /&gt;
== Project ==&lt;br /&gt;
Title: Database Output Storage for PyWPS&lt;br /&gt;
&lt;br /&gt;
Student: Jan Pišl&lt;br /&gt;
&lt;br /&gt;
Mentors: [[User:Jachym|Jáchym Čepický]], [[User:Martinl|Martin Landa]].&lt;br /&gt;
&lt;br /&gt;
Project's repositories: [https://github.com/janpisl/Database-Output-Storage-for-PyWPS GitHub repository], [https://summerofcode.withgoogle.com/projects/#5084513521106944 Project's page on GSoC website] &lt;br /&gt;
&lt;br /&gt;
== Technology ==&lt;br /&gt;
&lt;br /&gt;
=== PyWPS ===&lt;br /&gt;
PyWPS is a server side implementation of the OGC Web Processing Service (OGC&lt;br /&gt;
WPS) standards 1.0.0. It is written in the Python programming language, it runs&lt;br /&gt;
on Python 2.7, 3.3 or higher and it is tested and developed on Linux. It uses&lt;br /&gt;
a ConfigParser format for configuration files. It supports a variety of geospatial&lt;br /&gt;
software and tools such as GRASS GIS, R Project or the GDAL library. Synchronous&lt;br /&gt;
and asynchronuous invocations are supported. As for request encoding, two options&lt;br /&gt;
are available - key-value pairs (using HTTP-GET) or XML payload (using HTTPPOST).&lt;br /&gt;
Every process that is to be deployed on the server is defined as a class&lt;br /&gt;
and has several mandatory parameters. The key parameter called &amp;quot;handler&amp;quot; gets&lt;br /&gt;
invoked every time there is an incoming request, it accepts the request and returns&lt;br /&gt;
a response.&lt;br /&gt;
&lt;br /&gt;
In 2016, it upgraded from PyWPS 3 to PyWPS 4. Some of the more significant&lt;br /&gt;
changes include every input being considered a list of inputs and all inputs having&lt;br /&gt;
file, data and stream attributes. These attributes allow better manipulation&lt;br /&gt;
with data.&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&lt;br /&gt;
Python is a high-level programming language that fully supports object-oriented and&lt;br /&gt;
structured programming. Developed in the late 1980s, the first version 0.9.0 was&lt;br /&gt;
released in 1991. In 2008, Python 3.0 was released. Currently, the most up-to-date&lt;br /&gt;
version available is 3.6.&lt;br /&gt;
It was designed as a syntactically simple language, using whitespace intendantion&lt;br /&gt;
instead of brackets and English words rather than punctuation. It is a dynamicallytyped&lt;br /&gt;
language, which means it is not neccessary to specify a data-type when defining&lt;br /&gt;
a variable. For its simplicity and readability, Python is often considered a good&lt;br /&gt;
first programming language to learn.&lt;br /&gt;
One of the key advantages of Python is its high extensibility. It provides large&lt;br /&gt;
standard libraries and also an extensive number of other modules, packages and&lt;br /&gt;
libraries, so most of the common programming tasks are already solved, scripted&lt;br /&gt;
and made available.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Dates !! Task !! Deliverables&lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period (April, 23 - May, 14) ||&lt;br /&gt;
Initial research on GDAL, MapServer, SQLAlchemy, GeoAlchemy, relational databases (PostgreSQL, Oracle, Microsoft SQL Server, MySQL, SQLite,...) &lt;br /&gt;
&lt;br /&gt;
Select which databases will be supported in this project.&lt;br /&gt;
&lt;br /&gt;
Set up environment for work - virtual environment with a distribution of Linux, instances of selected database management systems for testing. &lt;br /&gt;
| [https://docs.google.com/document/d/1DzdT0bcAmeU4EsoZlg8jBZmcfx6mIPe4Z8PRwsWzP_U/edit#heading=h.9dmblslll4ai Bonding Period Report]&lt;br /&gt;
|-&lt;br /&gt;
| Week 1 (May, 14 - May, 20) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Define “DbStorage”, an abstract base class that will ensure derived classes implement particular methods from this class. Define abstract methods that are necessary for writing output data to a remote database.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 2 (May, 21 - May, 27) ||&lt;br /&gt;
&lt;br /&gt;
Write test script that checks “PgStorage” will work correctly and write output vector data to a PostgreSQL database.&lt;br /&gt;
&lt;br /&gt;
Develop “PgStorage“ class that inherits from “DbStorage” and implements proposed functionality.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 3 (May, 28 - June, 3) ||&lt;br /&gt;
&lt;br /&gt;
Write a test (or update test written in the previous week) to ensure correct functionality of newly developed classes.&lt;br /&gt;
&lt;br /&gt;
Develop several classes based on selection in week 1 – e.g. “MSSQLStorage”, “OCIStorage”, “MySQLStorage”, etc.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 4 (June, 4 - June, 10) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Develop a mechanism for handling raster output data and implement it in the above-mentioned classes. If GDAL does not support writing raster data to a specific database by default, appropriate tool or library must be identified. For example, for writing raster data into PostgreSQL, ”raster2pgsql“ tool can be used.&lt;br /&gt;
&lt;br /&gt;
Decide how other types of data (such as string, table, CSV, etc.) will be handled and implement it.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 5 (June, 11 - June, 15) Phase 1 Evaluation||&lt;br /&gt;
&lt;br /&gt;
Write a test that checks all data types will get correctly stored in database.&lt;br /&gt;
&lt;br /&gt;
Write and submit weekly report.&lt;br /&gt;
&lt;br /&gt;
Write and submit Phase 1 evaluation.&lt;br /&gt;
&lt;br /&gt;
'''Deliverables for Phase 1:''' Correctly functioning and tested module that enables output data (vector, raster or other) to be stored in one of several database management systems.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 6 (June, 16 - June, 24) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Handle metadata. Currently, logs with information about run processes (such as when a process started and finished) are stored in a SQLite database. Implement a functionality that accesses logs, extracts desired metadata from them and saves them in the same database as output data. Use unique identifier of every process to join metadata (using primary key) with the corresponding output data (foreign key). For each run process, include expiration date to its output data.&lt;br /&gt;
&lt;br /&gt;
Develop a trigger that removes output data when it expires.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 7 (June, 25 - July, 1) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Establish a connection between database and MapServer and allow MapServer to access output data stored in database.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 8 (July, 2 - July, 8) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable output data to be viewed as WMS services through MapServer.&lt;br /&gt;
&lt;br /&gt;
Edit current code so the reference embodied in the responding document is a URL link to a running MapServer service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 9 (July, 9 - July, 13) Phase 2 Evaluation||&lt;br /&gt;
&lt;br /&gt;
Write and submit Phase 2 evaluation.&lt;br /&gt;
&lt;br /&gt;
'''Deliverables for Phase 2''': Correctly functioning and tested module that enables output data to be viewed as a Web Map Service using MapServer.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 10 (July, 14 - July, 22) ||&lt;br /&gt;
&lt;br /&gt;
Update previously developed test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable raster output data to be accessed and/or edited as OGC Web Coverage Service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 11 (July, 23 - July, 29) ||&lt;br /&gt;
&lt;br /&gt;
Update previously developed test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable vector output data to be accessed and/or edited as OGC Web Feature Service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 12 (July, 30 - August, 5) ||&lt;br /&gt;
&lt;br /&gt;
Write a test that ensures newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Develop a demo that demonstrates implemented functionality.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 13 (August, 6 - August, 14)&lt;br /&gt;
&lt;br /&gt;
||Create documentation that can be added to the current PyWPS documentation.&lt;br /&gt;
&lt;br /&gt;
Finalize work, clean code and prepare a pull request(s) to PyWPS GitHub repository.&lt;br /&gt;
&lt;br /&gt;
Write and submit final report.&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Reports ==&lt;br /&gt;
=== Bonding Period ===&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/document/d/1DzdT0bcAmeU4EsoZlg8jBZmcfx6mIPe4Z8PRwsWzP_U/edit#heading=h.9dmblslll4ai Bonding Period Report]&lt;br /&gt;
&lt;br /&gt;
=== Week 1===&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
I defined the first version of “DbStorage”, a class that will allow output data to be stored in one of RDBMSs supported (PostGIS, MS Server, Oracle spatial, SpatiaLite) [1]&lt;br /&gt;
I downloaded PostgreSQL and PostGIS and run it locally on my computer. I tested it functions correctly by using code I had written previously to GSoC [2] that stores output data in PostGIS. I run some of PyWPS test processes and checked output data does get stored in PostGIS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
Implement PGStorage, a class within the DbStorage class that will store output data to PostGIS and returns database name, schema and table as a reference to the client. &lt;br /&gt;
Start working on implementing MSServerStorage, OciStorage and SpatiaLiteStorage.&lt;br /&gt;
Download, run and test SpatiaLite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/45b98e04c428c2e62643a42bbebfedf8efc0603e&lt;br /&gt;
&lt;br /&gt;
[2] https://github.com/ctu-geoforall-lab-projects/bp-pisl-2018-pywps/commit/c364be4888d74b2285e5a348afc6c3fe184fbc64&lt;br /&gt;
&lt;br /&gt;
=== Week 2===&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
Develop and implement PGStorage, a class within the DbStorage class that will store output data to PostGIS and returns database name, schema and table as a reference to the client.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Study materials on Factory design pattern [2] recommended by my mentor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Download, run and test SpatiaLite. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
Develop, implement and test _MSSQLStorage and _OciStorage _MySQLStorage classes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
I have some questions related to work I will be doing next week. I will consult with my mentor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[0] https://wiki.osgeo.org/wiki/Database_Output_Storage_for_PyWPS&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/254b1e5697c0b4781544a6329b52eb4688e60a22&lt;br /&gt;
&lt;br /&gt;
[2]  http://python-3-patterns-idioms-test.readthedocs.io/en/latest/Factory.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Google Summer of Code]]&lt;/div&gt;</summary>
		<author><name>Wiki-Janpisl</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Database_Output_Storage_for_PyWPS&amp;diff=114969</id>
		<title>Database Output Storage for PyWPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Database_Output_Storage_for_PyWPS&amp;diff=114969"/>
		<updated>2018-05-20T13:03:01Z</updated>

		<summary type="html">&lt;p&gt;Wiki-Janpisl: week 1 report added&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
My name is Jan Pisl and I study at the Czech Technical University in Prague. I will be participating in this year's GSoC. My project’s aim is to develop database storage support for PyWPS that would allow output data to be stored in a database in a way that is compliant with the OGC WPS Standard. I will be using Python 3.6. &lt;br /&gt;
&lt;br /&gt;
== Project ==&lt;br /&gt;
Title: Database Output Storage for PyWPS&lt;br /&gt;
&lt;br /&gt;
Student: Jan Pišl&lt;br /&gt;
&lt;br /&gt;
Mentors: [[User:Jachym|Jáchym Čepický]], [[User:Martinl|Martin Landa]].&lt;br /&gt;
&lt;br /&gt;
Project's repositories: [https://github.com/janpisl/Database-Output-Storage-for-PyWPS GitHub repository], [https://summerofcode.withgoogle.com/projects/#5084513521106944 Project's page on GSoC website] &lt;br /&gt;
&lt;br /&gt;
== Technology ==&lt;br /&gt;
&lt;br /&gt;
=== PyWPS ===&lt;br /&gt;
PyWPS is a server side implementation of the OGC Web Processing Service (OGC&lt;br /&gt;
WPS) standards 1.0.0. It is written in the Python programming language, it runs&lt;br /&gt;
on Python 2.7, 3.3 or higher and it is tested and developed on Linux. It uses&lt;br /&gt;
a ConfigParser format for configuration files. It supports a variety of geospatial&lt;br /&gt;
software and tools such as GRASS GIS, R Project or the GDAL library. Synchronous&lt;br /&gt;
and asynchronuous invocations are supported. As for request encoding, two options&lt;br /&gt;
are available - key-value pairs (using HTTP-GET) or XML payload (using HTTPPOST).&lt;br /&gt;
Every process that is to be deployed on the server is defined as a class&lt;br /&gt;
and has several mandatory parameters. The key parameter called &amp;quot;handler&amp;quot; gets&lt;br /&gt;
invoked every time there is an incoming request, it accepts the request and returns&lt;br /&gt;
a response.&lt;br /&gt;
&lt;br /&gt;
In 2016, it upgraded from PyWPS 3 to PyWPS 4. Some of the more significant&lt;br /&gt;
changes include every input being considered a list of inputs and all inputs having&lt;br /&gt;
file, data and stream attributes. These attributes allow better manipulation&lt;br /&gt;
with data.&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&lt;br /&gt;
Python is a high-level programming language that fully supports object-oriented and&lt;br /&gt;
structured programming. Developed in the late 1980s, the first version 0.9.0 was&lt;br /&gt;
released in 1991. In 2008, Python 3.0 was released. Currently, the most up-to-date&lt;br /&gt;
version available is 3.6.&lt;br /&gt;
It was designed as a syntactically simple language, using whitespace intendantion&lt;br /&gt;
instead of brackets and English words rather than punctuation. It is a dynamicallytyped&lt;br /&gt;
language, which means it is not neccessary to specify a data-type when defining&lt;br /&gt;
a variable. For its simplicity and readability, Python is often considered a good&lt;br /&gt;
first programming language to learn.&lt;br /&gt;
One of the key advantages of Python is its high extensibility. It provides large&lt;br /&gt;
standard libraries and also an extensive number of other modules, packages and&lt;br /&gt;
libraries, so most of the common programming tasks are already solved, scripted&lt;br /&gt;
and made available.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Dates !! Task !! Deliverables&lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period (April, 23 - May, 14) ||&lt;br /&gt;
Initial research on GDAL, MapServer, SQLAlchemy, GeoAlchemy, relational databases (PostgreSQL, Oracle, Microsoft SQL Server, MySQL, SQLite,...) &lt;br /&gt;
&lt;br /&gt;
Select which databases will be supported in this project.&lt;br /&gt;
&lt;br /&gt;
Set up environment for work - virtual environment with a distribution of Linux, instances of selected database management systems for testing. &lt;br /&gt;
| [https://docs.google.com/document/d/1DzdT0bcAmeU4EsoZlg8jBZmcfx6mIPe4Z8PRwsWzP_U/edit#heading=h.9dmblslll4ai Bonding Period Report]&lt;br /&gt;
|-&lt;br /&gt;
| Week 1 (May, 14 - May, 20) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Define “DbStorage”, an abstract base class that will ensure derived classes implement particular methods from this class. Define abstract methods that are necessary for writing output data to a remote database.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 2 (May, 21 - May, 27) ||&lt;br /&gt;
&lt;br /&gt;
Write test script that checks “PgStorage” will work correctly and write output vector data to a PostgreSQL database.&lt;br /&gt;
&lt;br /&gt;
Develop “PgStorage“ class that inherits from “DbStorage” and implements proposed functionality.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 3 (May, 28 - June, 3) ||&lt;br /&gt;
&lt;br /&gt;
Write a test (or update test written in the previous week) to ensure correct functionality of newly developed classes.&lt;br /&gt;
&lt;br /&gt;
Develop several classes based on selection in week 1 – e.g. “MSSQLStorage”, “OCIStorage”, “MySQLStorage”, etc.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 4 (June, 4 - June, 10) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Develop a mechanism for handling raster output data and implement it in the above-mentioned classes. If GDAL does not support writing raster data to a specific database by default, appropriate tool or library must be identified. For example, for writing raster data into PostgreSQL, ”raster2pgsql“ tool can be used.&lt;br /&gt;
&lt;br /&gt;
Decide how other types of data (such as string, table, CSV, etc.) will be handled and implement it.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 5 (June, 11 - June, 15) Phase 1 Evaluation||&lt;br /&gt;
&lt;br /&gt;
Write a test that checks all data types will get correctly stored in database.&lt;br /&gt;
&lt;br /&gt;
Write and submit weekly report.&lt;br /&gt;
&lt;br /&gt;
Write and submit Phase 1 evaluation.&lt;br /&gt;
&lt;br /&gt;
'''Deliverables for Phase 1:''' Correctly functioning and tested module that enables output data (vector, raster or other) to be stored in one of several database management systems.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 6 (June, 16 - June, 24) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Handle metadata. Currently, logs with information about run processes (such as when a process started and finished) are stored in a SQLite database. Implement a functionality that accesses logs, extracts desired metadata from them and saves them in the same database as output data. Use unique identifier of every process to join metadata (using primary key) with the corresponding output data (foreign key). For each run process, include expiration date to its output data.&lt;br /&gt;
&lt;br /&gt;
Develop a trigger that removes output data when it expires.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 7 (June, 25 - July, 1) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Establish a connection between database and MapServer and allow MapServer to access output data stored in database.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 8 (July, 2 - July, 8) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable output data to be viewed as WMS services through MapServer.&lt;br /&gt;
&lt;br /&gt;
Edit current code so the reference embodied in the responding document is a URL link to a running MapServer service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 9 (July, 9 - July, 13) Phase 2 Evaluation||&lt;br /&gt;
&lt;br /&gt;
Write and submit Phase 2 evaluation.&lt;br /&gt;
&lt;br /&gt;
'''Deliverables for Phase 2''': Correctly functioning and tested module that enables output data to be viewed as a Web Map Service using MapServer.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 10 (July, 14 - July, 22) ||&lt;br /&gt;
&lt;br /&gt;
Update previously developed test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable raster output data to be accessed and/or edited as OGC Web Coverage Service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 11 (July, 23 - July, 29) ||&lt;br /&gt;
&lt;br /&gt;
Update previously developed test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable vector output data to be accessed and/or edited as OGC Web Feature Service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 12 (July, 30 - August, 5) ||&lt;br /&gt;
&lt;br /&gt;
Write a test that ensures newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Develop a demo that demonstrates implemented functionality.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 13 (August, 6 - August, 14)&lt;br /&gt;
&lt;br /&gt;
||Create documentation that can be added to the current PyWPS documentation.&lt;br /&gt;
&lt;br /&gt;
Finalize work, clean code and prepare a pull request(s) to PyWPS GitHub repository.&lt;br /&gt;
&lt;br /&gt;
Write and submit final report.&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Reports ==&lt;br /&gt;
=== Bonding Period ===&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/document/d/1DzdT0bcAmeU4EsoZlg8jBZmcfx6mIPe4Z8PRwsWzP_U/edit#heading=h.9dmblslll4ai Bonding Period Report]&lt;br /&gt;
&lt;br /&gt;
=== Week 1===&lt;br /&gt;
&lt;br /&gt;
'''What did you get done this period?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
I defined the first version of “DbStorage”, a class that will allow output data to be stored in one of RDBMSs supported (PostGIS, MS Server, Oracle spatial, SpatiaLite) [1]&lt;br /&gt;
I downloaded PostgreSQL and PostGIS and run it locally on my computer. I tested it functions correctly by using code I had written previously to GSoC [2] that stores output data in PostGIS. I run some of PyWPS test processes and checked output data does get stored in PostGIS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''What do you plan on doing next week (period) ?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
Implement PGStorage, a class within the DbStorage class that will store output data to PostGIS and returns database name, schema and table as a reference to the client. &lt;br /&gt;
Start working on implementing MSServerStorage, OciStorage and SpatiaLiteStorage.&lt;br /&gt;
Download, run and test SpatiaLite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Are you blocked on anything?&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] https://github.com/janpisl/pywps/commit/45b98e04c428c2e62643a42bbebfedf8efc0603e&lt;br /&gt;
&lt;br /&gt;
[2] https://github.com/ctu-geoforall-lab-projects/bp-pisl-2018-pywps/commit/c364be4888d74b2285e5a348afc6c3fe184fbc64&lt;br /&gt;
&lt;br /&gt;
[[Category: Google Summer of Code]]&lt;/div&gt;</summary>
		<author><name>Wiki-Janpisl</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Database_Output_Storage_for_PyWPS&amp;diff=114968</id>
		<title>Database Output Storage for PyWPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Database_Output_Storage_for_PyWPS&amp;diff=114968"/>
		<updated>2018-05-20T12:47:18Z</updated>

		<summary type="html">&lt;p&gt;Wiki-Janpisl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
My name is Jan Pisl and I study at the Czech Technical University in Prague. I will be participating in this year's GSoC. My project’s aim is to develop database storage support for PyWPS that would allow output data to be stored in a database in a way that is compliant with the OGC WPS Standard. I will be using Python 3.6. &lt;br /&gt;
&lt;br /&gt;
== Project ==&lt;br /&gt;
Title: Database Output Storage for PyWPS&lt;br /&gt;
&lt;br /&gt;
Student: Jan Pišl&lt;br /&gt;
&lt;br /&gt;
Mentors: [[User:Jachym|Jáchym Čepický]], [[User:Martinl|Martin Landa]].&lt;br /&gt;
&lt;br /&gt;
Project's repositories: [https://github.com/janpisl/Database-Output-Storage-for-PyWPS GitHub repository], [https://summerofcode.withgoogle.com/projects/#5084513521106944 Project's page on GSoC website] &lt;br /&gt;
&lt;br /&gt;
== Technology ==&lt;br /&gt;
&lt;br /&gt;
=== PyWPS ===&lt;br /&gt;
PyWPS is a server side implementation of the OGC Web Processing Service (OGC&lt;br /&gt;
WPS) standards 1.0.0. It is written in the Python programming language, it runs&lt;br /&gt;
on Python 2.7, 3.3 or higher and it is tested and developed on Linux. It uses&lt;br /&gt;
a ConfigParser format for configuration files. It supports a variety of geospatial&lt;br /&gt;
software and tools such as GRASS GIS, R Project or the GDAL library. Synchronous&lt;br /&gt;
and asynchronuous invocations are supported. As for request encoding, two options&lt;br /&gt;
are available - key-value pairs (using HTTP-GET) or XML payload (using HTTPPOST).&lt;br /&gt;
Every process that is to be deployed on the server is defined as a class&lt;br /&gt;
and has several mandatory parameters. The key parameter called &amp;quot;handler&amp;quot; gets&lt;br /&gt;
invoked every time there is an incoming request, it accepts the request and returns&lt;br /&gt;
a response.&lt;br /&gt;
&lt;br /&gt;
In 2016, it upgraded from PyWPS 3 to PyWPS 4. Some of the more significant&lt;br /&gt;
changes include every input being considered a list of inputs and all inputs having&lt;br /&gt;
file, data and stream attributes. These attributes allow better manipulation&lt;br /&gt;
with data.&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&lt;br /&gt;
Python is a high-level programming language that fully supports object-oriented and&lt;br /&gt;
structured programming. Developed in the late 1980s, the first version 0.9.0 was&lt;br /&gt;
released in 1991. In 2008, Python 3.0 was released. Currently, the most up-to-date&lt;br /&gt;
version available is 3.6.&lt;br /&gt;
It was designed as a syntactically simple language, using whitespace intendantion&lt;br /&gt;
instead of brackets and English words rather than punctuation. It is a dynamicallytyped&lt;br /&gt;
language, which means it is not neccessary to specify a data-type when defining&lt;br /&gt;
a variable. For its simplicity and readability, Python is often considered a good&lt;br /&gt;
first programming language to learn.&lt;br /&gt;
One of the key advantages of Python is its high extensibility. It provides large&lt;br /&gt;
standard libraries and also an extensive number of other modules, packages and&lt;br /&gt;
libraries, so most of the common programming tasks are already solved, scripted&lt;br /&gt;
and made available.&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Dates !! Task !! Deliverables&lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period (April, 23 - May, 14) ||&lt;br /&gt;
Initial research on GDAL, MapServer, SQLAlchemy, GeoAlchemy, relational databases (PostgreSQL, Oracle, Microsoft SQL Server, MySQL, SQLite,...) &lt;br /&gt;
&lt;br /&gt;
Select which databases will be supported in this project.&lt;br /&gt;
&lt;br /&gt;
Set up environment for work - virtual environment with a distribution of Linux, instances of selected database management systems for testing. &lt;br /&gt;
| [https://docs.google.com/document/d/1DzdT0bcAmeU4EsoZlg8jBZmcfx6mIPe4Z8PRwsWzP_U/edit#heading=h.9dmblslll4ai Bonding Period Report]&lt;br /&gt;
|-&lt;br /&gt;
| Week 1 (May, 14 - May, 20) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Define “DbStorage”, an abstract base class that will ensure derived classes implement particular methods from this class. Define abstract methods that are necessary for writing output data to a remote database.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 2 (May, 21 - May, 27) ||&lt;br /&gt;
&lt;br /&gt;
Write test script that checks “PgStorage” will work correctly and write output vector data to a PostgreSQL database.&lt;br /&gt;
&lt;br /&gt;
Develop “PgStorage“ class that inherits from “DbStorage” and implements proposed functionality.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 3 (May, 28 - June, 3) ||&lt;br /&gt;
&lt;br /&gt;
Write a test (or update test written in the previous week) to ensure correct functionality of newly developed classes.&lt;br /&gt;
&lt;br /&gt;
Develop several classes based on selection in week 1 – e.g. “MSSQLStorage”, “OCIStorage”, “MySQLStorage”, etc.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 4 (June, 4 - June, 10) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Develop a mechanism for handling raster output data and implement it in the above-mentioned classes. If GDAL does not support writing raster data to a specific database by default, appropriate tool or library must be identified. For example, for writing raster data into PostgreSQL, ”raster2pgsql“ tool can be used.&lt;br /&gt;
&lt;br /&gt;
Decide how other types of data (such as string, table, CSV, etc.) will be handled and implement it.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 5 (June, 11 - June, 15) Phase 1 Evaluation||&lt;br /&gt;
&lt;br /&gt;
Write a test that checks all data types will get correctly stored in database.&lt;br /&gt;
&lt;br /&gt;
Write and submit weekly report.&lt;br /&gt;
&lt;br /&gt;
Write and submit Phase 1 evaluation.&lt;br /&gt;
&lt;br /&gt;
'''Deliverables for Phase 1:''' Correctly functioning and tested module that enables output data (vector, raster or other) to be stored in one of several database management systems.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 6 (June, 16 - June, 24) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Handle metadata. Currently, logs with information about run processes (such as when a process started and finished) are stored in a SQLite database. Implement a functionality that accesses logs, extracts desired metadata from them and saves them in the same database as output data. Use unique identifier of every process to join metadata (using primary key) with the corresponding output data (foreign key). For each run process, include expiration date to its output data.&lt;br /&gt;
&lt;br /&gt;
Develop a trigger that removes output data when it expires.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 7 (June, 25 - July, 1) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Establish a connection between database and MapServer and allow MapServer to access output data stored in database.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 8 (July, 2 - July, 8) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable output data to be viewed as WMS services through MapServer.&lt;br /&gt;
&lt;br /&gt;
Edit current code so the reference embodied in the responding document is a URL link to a running MapServer service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 9 (July, 9 - July, 13) Phase 2 Evaluation||&lt;br /&gt;
&lt;br /&gt;
Write and submit Phase 2 evaluation.&lt;br /&gt;
&lt;br /&gt;
'''Deliverables for Phase 2''': Correctly functioning and tested module that enables output data to be viewed as a Web Map Service using MapServer.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 10 (July, 14 - July, 22) ||&lt;br /&gt;
&lt;br /&gt;
Update previously developed test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable raster output data to be accessed and/or edited as OGC Web Coverage Service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 11 (July, 23 - July, 29) ||&lt;br /&gt;
&lt;br /&gt;
Update previously developed test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable vector output data to be accessed and/or edited as OGC Web Feature Service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 12 (July, 30 - August, 5) ||&lt;br /&gt;
&lt;br /&gt;
Write a test that ensures newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Develop a demo that demonstrates implemented functionality.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 13 (August, 6 - August, 14)&lt;br /&gt;
&lt;br /&gt;
||Create documentation that can be added to the current PyWPS documentation.&lt;br /&gt;
&lt;br /&gt;
Finalize work, clean code and prepare a pull request(s) to PyWPS GitHub repository.&lt;br /&gt;
&lt;br /&gt;
Write and submit final report.&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Google Summer of Code]]&lt;/div&gt;</summary>
		<author><name>Wiki-Janpisl</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Database_Output_Storage_for_PyWPS&amp;diff=114948</id>
		<title>Database Output Storage for PyWPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Database_Output_Storage_for_PyWPS&amp;diff=114948"/>
		<updated>2018-05-15T13:37:17Z</updated>

		<summary type="html">&lt;p&gt;Wiki-Janpisl: link to the bonding period report added&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
My name is Jan Pisl and I study at the Czech Technical University in Prague. I will be participating in this year's GSoC. My project’s aim is to develop database storage support for PyWPS that would allow output data to be stored in a database in a way that is compliant with the OGC WPS Standard. I will be using Python 3.6. &lt;br /&gt;
&lt;br /&gt;
== Project ==&lt;br /&gt;
Title: Database Output Storage for PyWPS&lt;br /&gt;
&lt;br /&gt;
Student: Jan Pišl&lt;br /&gt;
&lt;br /&gt;
Mentors: [[User:Jachym|Jáchym Čepický]], [[User:Martinl|Martin Landa]].&lt;br /&gt;
&lt;br /&gt;
Project's repositories: [https://github.com/janpisl/Database-Output-Storage-for-PyWPS GitHub repository], [https://summerofcode.withgoogle.com/projects/#5084513521106944 Project's page on GSoC website] &lt;br /&gt;
&lt;br /&gt;
== Technology ==&lt;br /&gt;
&lt;br /&gt;
=== PyWPS ===&lt;br /&gt;
PyWPS is a server side implementation of the OGC Web Processing Service (OGC&lt;br /&gt;
WPS) standards 1.0.0. It is written in the Python programming language, it runs&lt;br /&gt;
on Python 2.7, 3.3 or higher and it is tested and developed on Linux. It uses&lt;br /&gt;
a ConfigParser format for configuration files. It supports a variety of geospatial&lt;br /&gt;
software and tools such as GRASS GIS, R Project or the GDAL library. Synchronous&lt;br /&gt;
and asynchronuous invocations are supported. As for request encoding, two options&lt;br /&gt;
are available - key-value pairs (using HTTP-GET) or XML payload (using HTTPPOST).&lt;br /&gt;
Every process that is to be deployed on the server is defined as a class&lt;br /&gt;
and has several mandatory parameters. The key parameter called &amp;quot;handler&amp;quot; gets&lt;br /&gt;
invoked every time there is an incoming request, it accepts the request and returns&lt;br /&gt;
a response.&lt;br /&gt;
&lt;br /&gt;
In 2016, it upgraded from PyWPS 3 to PyWPS 4. Some of the more significant&lt;br /&gt;
changes include every input being considered a list of inputs and all inputs having&lt;br /&gt;
file, data and stream attributes. These attributes allow better manipulation&lt;br /&gt;
with data.&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&lt;br /&gt;
Python is a high-level programming language that fully supports object-oriented and&lt;br /&gt;
structured programming. Developed in the late 1980s, the first version 0.9.0 was&lt;br /&gt;
released in 1991. In 2008, Python 3.0 was released. Currently, the most up-to-date&lt;br /&gt;
version available is 3.6.&lt;br /&gt;
It was designed as a syntactically simple language, using whitespace intendantion&lt;br /&gt;
instead of brackets and English words rather than punctuation. It is a dynamicallytyped&lt;br /&gt;
language, which means it is not neccessary to specify a data-type when defining&lt;br /&gt;
a variable. For its simplicity and readability, Python is often considered a good&lt;br /&gt;
first programming language to learn.&lt;br /&gt;
One of the key advantages of Python is its high extensibility. It provides large&lt;br /&gt;
standard libraries and also an extensive number of other modules, packages and&lt;br /&gt;
libraries, so most of the common programming tasks are already solved, scripted&lt;br /&gt;
and made available.&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Header 1&lt;br /&gt;
! Header 2&lt;br /&gt;
! Header 3&lt;br /&gt;
|-&lt;br /&gt;
| row 1, cell 1&lt;br /&gt;
| row 1, cell 2&lt;br /&gt;
| row 1, cell 3&lt;br /&gt;
|-&lt;br /&gt;
| row 2, cell 1&lt;br /&gt;
| row 2, cell 2&lt;br /&gt;
| row 2, cell 3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Dates !! Task !! Deliverables&lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period (April, 23 - May, 14) ||&lt;br /&gt;
Initial research on GDAL, MapServer, SQLAlchemy, GeoAlchemy, relational databases (PostgreSQL, Oracle, Microsoft SQL Server, MySQL, SQLite,...) &lt;br /&gt;
&lt;br /&gt;
Select which databases will be supported in this project.&lt;br /&gt;
&lt;br /&gt;
Set up environment for work - virtual environment with a distribution of Linux, instances of selected database management systems for testing. &lt;br /&gt;
| [https://docs.google.com/document/d/1DzdT0bcAmeU4EsoZlg8jBZmcfx6mIPe4Z8PRwsWzP_U/edit#heading=h.9dmblslll4ai Bonding Period Report]&lt;br /&gt;
|-&lt;br /&gt;
| Week 1 (May, 14 - May, 20) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Define “DbStorage”, an abstract base class that will ensure derived classes implement particular methods from this class. Define abstract methods that are necessary for writing output data to a remote database.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 2 (May, 21 - May, 27) ||&lt;br /&gt;
&lt;br /&gt;
Write test script that checks “PgStorage” will work correctly and write output vector data to a PostgreSQL database.&lt;br /&gt;
&lt;br /&gt;
Develop “PgStorage“ class that inherits from “DbStorage” and implements proposed functionality.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 3 (May, 28 - June, 3) ||&lt;br /&gt;
&lt;br /&gt;
Write a test (or update test written in the previous week) to ensure correct functionality of newly developed classes.&lt;br /&gt;
&lt;br /&gt;
Develop several classes based on selection in week 1 – e.g. “MSSQLStorage”, “OCIStorage”, “MySQLStorage”, etc.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 4 (June, 4 - June, 10) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Develop a mechanism for handling raster output data and implement it in the above-mentioned classes. If GDAL does not support writing raster data to a specific database by default, appropriate tool or library must be identified. For example, for writing raster data into PostgreSQL, ”raster2pgsql“ tool can be used.&lt;br /&gt;
&lt;br /&gt;
Decide how other types of data (such as string, table, CSV, etc.) will be handled and implement it.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 5 (June, 11 - June, 15) Phase 1 Evaluation||&lt;br /&gt;
&lt;br /&gt;
Write a test that checks all data types will get correctly stored in database.&lt;br /&gt;
&lt;br /&gt;
Write and submit weekly report.&lt;br /&gt;
&lt;br /&gt;
Write and submit Phase 1 evaluation.&lt;br /&gt;
&lt;br /&gt;
'''Deliverables for Phase 1:''' Correctly functioning and tested module that enables output data (vector, raster or other) to be stored in one of several database management systems.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 6 (June, 16 - June, 24) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Handle metadata. Currently, logs with information about run processes (such as when a process started and finished) are stored in a SQLite database. Implement a functionality that accesses logs, extracts desired metadata from them and saves them in the same database as output data. Use unique identifier of every process to join metadata (using primary key) with the corresponding output data (foreign key). For each run process, include expiration date to its output data.&lt;br /&gt;
&lt;br /&gt;
Develop a trigger that removes output data when it expires.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 7 (June, 25 - July, 1) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Establish a connection between database and MapServer and allow MapServer to access output data stored in database.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 8 (July, 2 - July, 8) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable output data to be viewed as WMS services through MapServer.&lt;br /&gt;
&lt;br /&gt;
Edit current code so the reference embodied in the responding document is a URL link to a running MapServer service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 9 (July, 9 - July, 13) Phase 2 Evaluation||&lt;br /&gt;
&lt;br /&gt;
Write and submit Phase 2 evaluation.&lt;br /&gt;
&lt;br /&gt;
'''Deliverables for Phase 2''': Correctly functioning and tested module that enables output data to be viewed as a Web Map Service using MapServer.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 10 (July, 14 - July, 22) ||&lt;br /&gt;
&lt;br /&gt;
Update previously developed test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable raster output data to be accessed and/or edited as OGC Web Coverage Service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 11 (July, 23 - July, 29) ||&lt;br /&gt;
&lt;br /&gt;
Update previously developed test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable vector output data to be accessed and/or edited as OGC Web Feature Service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 12 (July, 30 - August, 5) ||&lt;br /&gt;
&lt;br /&gt;
Write a test that ensures newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Develop a demo that demonstrates implemented functionality.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 13 (August, 6 - August, 14)&lt;br /&gt;
&lt;br /&gt;
||Create documentation that can be added to the current PyWPS documentation.&lt;br /&gt;
&lt;br /&gt;
Finalize work, clean code and prepare a pull request(s) to PyWPS GitHub repository.&lt;br /&gt;
&lt;br /&gt;
Write and submit final report.&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Google Summer of Code]]&lt;/div&gt;</summary>
		<author><name>Wiki-Janpisl</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Google_Summer_of_Code_2018_Accepted&amp;diff=114947</id>
		<title>Google Summer of Code 2018 Accepted</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Google_Summer_of_Code_2018_Accepted&amp;diff=114947"/>
		<updated>2018-05-15T12:54:11Z</updated>

		<summary type="html">&lt;p&gt;Wiki-Janpisl: Update github repository&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;center&amp;gt;&lt;br /&gt;
[[Image:GSoC2016Logo.jpg|400px|link=https://developers.google.com/open-source/gsoc/]] &amp;lt;font size=&amp;quot;+3&amp;quot;&amp;gt; @ &amp;lt;/font&amp;gt; &lt;br /&gt;
[[Image:Osgeo-logo.png|300px|link=http://www.osgeo.org]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Back to the main OSGeo [[Google Summer of Code 2018]] @ OSGeo wiki page.&lt;br /&gt;
&lt;br /&gt;
== Accepted Proposals ==&lt;br /&gt;
&lt;br /&gt;
This year OSGeo accepted 13 students working on the following projects:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;   border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; rules=&amp;quot;all&amp;quot; style=&amp;quot;margin:1em 1em 1em 0; border:solid 1px #AAAAAA; border-collapse:collapse; background-color:#D7E3D1; font-size:95%; empty-cells:show;&amp;quot; &lt;br /&gt;
|'''Community'''&lt;br /&gt;
|'''Project'''&lt;br /&gt;
|'''Student'''&lt;br /&gt;
|'''1st mentor'''&lt;br /&gt;
|'''2nd mentor'''&lt;br /&gt;
|'''3rd mentor'''&lt;br /&gt;
|'''Wiki page'''&lt;br /&gt;
|'''Repository'''&lt;br /&gt;
|-&lt;br /&gt;
|Gisquick&lt;br /&gt;
|Extension of Gisquick platform filtering tool based on raster and vector spatio-temporal data&lt;br /&gt;
|David Těthal&lt;br /&gt;
|Marcel Dancák&lt;br /&gt;
|Martin Landa&lt;br /&gt;
|&lt;br /&gt;
|https://github.com/davidtethal/gisquick-gsoc2018/wiki/GSoC-2018-Extension-of-Gisquick-platform&lt;br /&gt;
|https://github.com/davidtethal&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|GRASS GIS&lt;br /&gt;
|GRASS GIS module for Sentinel-2 cloud and shadow detection&lt;br /&gt;
|Roberta Fagadini&lt;br /&gt;
|Roberto Marzocchi&lt;br /&gt;
|Moritz Lennert&lt;br /&gt;
|&lt;br /&gt;
|https://trac.osgeo.org/grass/wiki/GSoC/2018/CloudsAndShadowsDetection&lt;br /&gt;
|https://github.com/RobiFag/GRASS_clouds_and_shadows.git&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|GRASS GIS&lt;br /&gt;
|Improve GRASS GIS integration in QGIS 3&lt;br /&gt;
|Radek Novotný&lt;br /&gt;
|Vaclav Petras&lt;br /&gt;
|Martin Landa&lt;br /&gt;
|&lt;br /&gt;
|https://trac.osgeo.org/grass/wiki/GSoC/2018/IntegrationInQGIS3&lt;br /&gt;
|https://github.com/radeknovotny94/GRASSIntegrationInQGIS3&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|GRASS GIS&lt;br /&gt;
|Full support of Python 3 in GRASS GIS&lt;br /&gt;
|Sanjeet Bhatti&lt;br /&gt;
|Anna Petrášová&lt;br /&gt;
|Luca Delucchi&lt;br /&gt;
|&lt;br /&gt;
|https://trac.osgeo.org/grass/wiki/GSoC/2018/FullSupportPython3&lt;br /&gt;
|https://github.com/sanjeetbhatti/FullSupportPython3&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|istSOS&lt;br /&gt;
|Support of Unit Of Measure conversion in istSOS3&lt;br /&gt;
|Rahul Chauhan&lt;br /&gt;
|MASSIMILIANO CANNATA&lt;br /&gt;
|Milan Antonovic&lt;br /&gt;
|&lt;br /&gt;
|https://wiki.osgeo.org/wiki/GSoC_18:_istSOS-Support_of_Unit_Of_Measure_conversion_in_istSOS3&lt;br /&gt;
|https://github.com/rahulworld/Support-of-Unit-Of-Measure-conversion-in-istSOS3&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|MapMint4ME&lt;br /&gt;
|Supporting Other Geometries Recording&lt;br /&gt;
|Iba DIOUF&lt;br /&gt;
|Gérald Fenoy&lt;br /&gt;
|Rajat Shinde&lt;br /&gt;
|&lt;br /&gt;
|https://wiki.osgeo.org/wiki/GSoC_2018:_MapMint4ME-_Supporting_Other_Geometries_Recording&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|NASA Web World Wind &lt;br /&gt;
|Support for WFS Format&lt;br /&gt;
|Garima Natani&lt;br /&gt;
|Jakub Balhar&lt;br /&gt;
|Gabriele Prestifilippo&lt;br /&gt;
|&lt;br /&gt;
|https://wiki.osgeo.org/wiki/GSoC_2018_NASA-ESA_WebWorldWind_Support_for_WFS_Format&lt;br /&gt;
|https://github.com/NASAWorldWind/WebWorldWind&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|pgRouting &lt;br /&gt;
|Implement Minimum Spanning Tree and Min-Cut for pgRouting by the Boost Graph Library.&lt;br /&gt;
|Aditya Pratap Singh&lt;br /&gt;
|Rohith Reddy Sankepally  @iamrohith94&lt;br /&gt;
|Vihan Jain - @vidhan13j07&lt;br /&gt;
|&lt;br /&gt;
|https://github.com/pgRouting/pgrouting/wiki/GSoC-2018-MST-and-Mincut&lt;br /&gt;
|https://github.com/pgRouting/pgrouting/tree/gsoc/mincut&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|pgRouting &lt;br /&gt;
|Making pgRoutingLayer plugin compatible with QGIS 3.0 and Adding GUI support for proposed stable functions which are scheduled for next release.&lt;br /&gt;
|Aasheesh Tiwari&lt;br /&gt;
|Cayetano Benavent @cayetanobv&lt;br /&gt;
|Vicky Vergara @cvvergara&lt;br /&gt;
|&lt;br /&gt;
|https://github.com/pgRouting/pgrouting/wiki/GSOC--2018-Making-pgRoutingLayer-plugin-compatible-with-QGIS-3-and-adding-additional-GUI-support&lt;br /&gt;
|https://github.com/pgRouting/pgRoutingLayer/tree/gsoc/python3&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|pgRouting &lt;br /&gt;
|Implement Minimum-cost flow Algorithm by the Boost Graph Library and Chinese Postman Problem for pgRouting&lt;br /&gt;
|Maoguang Wang&lt;br /&gt;
|Vihan Jain - @vidhan13j07&lt;br /&gt;
|Daniel Kastl - @dkastl&lt;br /&gt;
|&lt;br /&gt;
|https://github.com/pgRouting/pgrouting/wiki/GSoC-2018-Minimum-cost-flow-and-ChPP&lt;br /&gt;
|https://github.com/pgRouting/pgrouting/tree/gsoc/ch_postman&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|pgRouting &lt;br /&gt;
|Implement Parallel Dijkstra’s and Bellman-Ford algorithm by the Parallel BGL&lt;br /&gt;
|Sourabh Garg&lt;br /&gt;
|Vicky Vergara @cvvergara&lt;br /&gt;
|Daniel Kastl - @dkastl&lt;br /&gt;
|&lt;br /&gt;
|https://github.com/pgRouting/pgrouting/wiki/GSoC-2018-Parallel-Dijkstra-and-Bellman-Ford&lt;br /&gt;
|https://github.com/pgRouting/pgrouting/tree/gsoc/bellford-pdijkstra&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|PostGIS &lt;br /&gt;
|Implement Geospatial Data Viewer in pgAdmin4 for PostGIS&lt;br /&gt;
|Xuri Gong&lt;br /&gt;
|Victoria Rautenbach&lt;br /&gt;
|Frikan Erwee&lt;br /&gt;
|&lt;br /&gt;
|https://trac.osgeo.org/postgis/wiki/GeospatialDataViewerInPgAdmin4ForPostGIS&lt;br /&gt;
|https://github.com/Gooong/pgadmin4&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|PyWPS &lt;br /&gt;
|Database Output Storage for PyWPS&lt;br /&gt;
|Jan Pišl&lt;br /&gt;
|Jachym Cepicky&lt;br /&gt;
|Martin Landa&lt;br /&gt;
|&lt;br /&gt;
|https://wiki.osgeo.org/wiki/Database_Output_Storage_for_PyWPS&lt;br /&gt;
|https://github.com/janpisl/pywps&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Wiki-Janpisl</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Google_Summer_of_Code_2018_Accepted&amp;diff=114751</id>
		<title>Google Summer of Code 2018 Accepted</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Google_Summer_of_Code_2018_Accepted&amp;diff=114751"/>
		<updated>2018-05-03T19:58:10Z</updated>

		<summary type="html">&lt;p&gt;Wiki-Janpisl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;center&amp;gt;&lt;br /&gt;
[[Image:GSoC2016Logo.jpg|400px|link=https://developers.google.com/open-source/gsoc/]] &amp;lt;font size=&amp;quot;+3&amp;quot;&amp;gt; @ &amp;lt;/font&amp;gt; &lt;br /&gt;
[[Image:Osgeo-logo.png|300px|link=http://www.osgeo.org]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Back to the main OSGeo [[Google Summer of Code 2018]] @ OSGeo wiki page.&lt;br /&gt;
&lt;br /&gt;
== Accepted Proposals ==&lt;br /&gt;
&lt;br /&gt;
This year OSGeo accepted 13 students working on the following projects:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;   border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; rules=&amp;quot;all&amp;quot; style=&amp;quot;margin:1em 1em 1em 0; border:solid 1px #AAAAAA; border-collapse:collapse; background-color:#D7E3D1; font-size:95%; empty-cells:show;&amp;quot; &lt;br /&gt;
|'''Community'''&lt;br /&gt;
|'''Project'''&lt;br /&gt;
|'''Student'''&lt;br /&gt;
|'''1st mentor'''&lt;br /&gt;
|'''2nd mentor'''&lt;br /&gt;
|'''3rd mentor'''&lt;br /&gt;
|'''Wiki page'''&lt;br /&gt;
|'''Repository'''&lt;br /&gt;
|-&lt;br /&gt;
|Gisquick&lt;br /&gt;
|Extension of Gisquick platform filtering tool based on raster and vector spatio-temporal data&lt;br /&gt;
|David Těthal&lt;br /&gt;
|Marcel Dancák&lt;br /&gt;
|Martin Landa&lt;br /&gt;
|&lt;br /&gt;
|https://github.com/davidtethal/gisquick-gsoc2017/wiki&lt;br /&gt;
|https://github.com/davidtethal&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|GRASS GIS&lt;br /&gt;
|GRASS GIS module for Sentinel-2 cloud and shadow detection&lt;br /&gt;
|Roberta Fagadini&lt;br /&gt;
|Roberto Marzocchi&lt;br /&gt;
|Moritz Lennert&lt;br /&gt;
|&lt;br /&gt;
|https://trac.osgeo.org/grass/wiki/GSoC/2018/CloudsAndShadowsDetection&lt;br /&gt;
|https://github.com/RobiFag/GRASS_clouds_and_shadows.git&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|GRASS GIS&lt;br /&gt;
|Improve GRASS GIS integration in QGIS 3&lt;br /&gt;
|Radek Novotný&lt;br /&gt;
|Vaclav Petras&lt;br /&gt;
|Martin Landa&lt;br /&gt;
|&lt;br /&gt;
|https://trac.osgeo.org/grass/wiki/GSoC/2018/IntegrationInQGIS3&lt;br /&gt;
|https://github.com/radeknovotny94/GRASSIntegrationInQGIS3&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|GRASS GIS&lt;br /&gt;
|Full support of Python 3 in GRASS GIS&lt;br /&gt;
|Sanjeet Bhatti&lt;br /&gt;
|Anna Petrášová&lt;br /&gt;
|Luca Delucchi&lt;br /&gt;
|&lt;br /&gt;
|https://trac.osgeo.org/grass/wiki/GSoC/2018/FullSupportPython3&lt;br /&gt;
|https://github.com/sanjeetbhatti/FullSupportPython3&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|istSOS&lt;br /&gt;
|Support of Unit Of Measure conversion in istSOS3&lt;br /&gt;
|Rahul Chauhan&lt;br /&gt;
|MASSIMILIANO CANNATA&lt;br /&gt;
|Milan Antonovic&lt;br /&gt;
|&lt;br /&gt;
|https://wiki.osgeo.org/wiki/GSoC_18:_istSOS-Support_of_Unit_Of_Measure_conversion_in_istSOS3&lt;br /&gt;
|https://github.com/rahulworld/Support-of-Unit-Of-Measure-conversion-in-istSOS3&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|MapMint4ME&lt;br /&gt;
|Supporting Other Geometries Recording&lt;br /&gt;
|Iba DIOUF&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|NASA Web World Wind &lt;br /&gt;
|Support for WFS Format&lt;br /&gt;
|Garima Natani&lt;br /&gt;
|Jakub Balhar&lt;br /&gt;
|Gabriele Prestifilippo&lt;br /&gt;
|&lt;br /&gt;
|https://wiki.osgeo.org/wiki/GSoC_2018_NASA-ESA_WebWorldWind_Support_for_WFS_Format&lt;br /&gt;
|https://github.com/NASAWorldWind/WebWorldWind&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|pgRouting &lt;br /&gt;
|Implement Minimum Spanning Tree and Min-Cut for pgRouting by the Boost Graph Library.&lt;br /&gt;
|Aditya Pratap Singh&lt;br /&gt;
|Rohith Reddy Sankepally  @iamrohith94&lt;br /&gt;
|Vihan Jain - @vidhan13j07&lt;br /&gt;
|&lt;br /&gt;
|https://github.com/pgRouting/pgrouting/wiki/GSoC-2018-MST-and-Mincut&lt;br /&gt;
|https://github.com/pgRouting/pgrouting/tree/gsoc/mincut&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|pgRouting &lt;br /&gt;
|Making pgRoutingLayer plugin compatible with QGIS 3.0 and Adding GUI support for proposed stable functions which are scheduled for next release.&lt;br /&gt;
|Aasheesh Tiwari&lt;br /&gt;
|Cayetano Benavent @cayetanobv&lt;br /&gt;
|Vicky Vergara @cvvergara&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|https://github.com/pgRouting/pgRoutingLayer/tree/gsoc/python3&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|pgRouting &lt;br /&gt;
|Implement Minimum-cost flow Algorithm by the Boost Graph Library and Chinese Postman Problem for pgRouting&lt;br /&gt;
|Maoguang Wang&lt;br /&gt;
|Vihan Jain - @vidhan13j07&lt;br /&gt;
|Daniel Kastl - @dkastl&lt;br /&gt;
|&lt;br /&gt;
|https://github.com/pgRouting/pgrouting/wiki/GSoC-2018-Minimum-cost-flow-and-ChPP&lt;br /&gt;
|https://github.com/pgRouting/pgrouting/tree/gsoc/ch_postman&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|pgRouting &lt;br /&gt;
|Implement Parallel Dijkstra’s and Bellman-Ford algorithm by the Parallel BGL&lt;br /&gt;
|Sourabh Garg&lt;br /&gt;
|Vicky Vergara @cvvergara&lt;br /&gt;
|Daniel Kastl - @dkastl&lt;br /&gt;
|&lt;br /&gt;
|https://github.com/pgRouting/pgrouting/wiki/GSoC-2018-Parallel-Dijkstra-and-Bellman-Ford&lt;br /&gt;
|https://github.com/pgRouting/pgrouting/tree/gsoc/bellford-pdijkstra&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|PostGIS &lt;br /&gt;
|Implement Geospatial Data Viewer in pgAdmin4 for PostGIS&lt;br /&gt;
|Xuri Gong&lt;br /&gt;
|Victoria Rautenbach&lt;br /&gt;
|Frikan Erwee&lt;br /&gt;
|&lt;br /&gt;
|https://trac.osgeo.org/postgis/wiki/GeospatialDataViewerInPgAdmin4ForPostGIS&lt;br /&gt;
|https://github.com/Gooong/pgadmin4&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|PyWPS &lt;br /&gt;
|Database Output Storage for PyWPS&lt;br /&gt;
|Jan Pišl&lt;br /&gt;
|Jachym Cepicky&lt;br /&gt;
|Martin Landa&lt;br /&gt;
|&lt;br /&gt;
|https://wiki.osgeo.org/wiki/Database_Output_Storage_for_PyWPS&lt;br /&gt;
|https://github.com/janpisl/Database-Output-Storage-for-PyWPS&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Wiki-Janpisl</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=DatabaseOutputStorageforPyWPS&amp;diff=114750</id>
		<title>DatabaseOutputStorageforPyWPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=DatabaseOutputStorageforPyWPS&amp;diff=114750"/>
		<updated>2018-05-03T19:57:19Z</updated>

		<summary type="html">&lt;p&gt;Wiki-Janpisl: Janpisl moved page DatabaseOutputStorageforPyWPS to Database Output Storage for PyWPS: change title formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Database Output Storage for PyWPS]]&lt;/div&gt;</summary>
		<author><name>Wiki-Janpisl</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Database_Output_Storage_for_PyWPS&amp;diff=114749</id>
		<title>Database Output Storage for PyWPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Database_Output_Storage_for_PyWPS&amp;diff=114749"/>
		<updated>2018-05-03T19:57:19Z</updated>

		<summary type="html">&lt;p&gt;Wiki-Janpisl: Janpisl moved page DatabaseOutputStorageforPyWPS to Database Output Storage for PyWPS: change title formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
My name is Jan Pisl and I study at the Czech Technical University in Prague. I will be participating in this year's GSoC. My project’s aim is to develop database storage support for PyWPS that would allow output data to be stored in a database in a way that is compliant with the OGC WPS Standard. I will be using Python 3.6. &lt;br /&gt;
&lt;br /&gt;
== Project ==&lt;br /&gt;
Title: Database Output Storage for PyWPS&lt;br /&gt;
&lt;br /&gt;
Student: Jan Pišl&lt;br /&gt;
&lt;br /&gt;
Mentors: [[User:Jachym|Jáchym Čepický]], [[User:Martinl|Martin Landa]].&lt;br /&gt;
&lt;br /&gt;
Project's repositories: [https://github.com/janpisl/Database-Output-Storage-for-PyWPS GitHub repository], [https://summerofcode.withgoogle.com/projects/#5084513521106944 Project's page on GSoC website] &lt;br /&gt;
&lt;br /&gt;
== Technology ==&lt;br /&gt;
&lt;br /&gt;
=== PyWPS ===&lt;br /&gt;
PyWPS is a server side implementation of the OGC Web Processing Service (OGC&lt;br /&gt;
WPS) standards 1.0.0. It is written in the Python programming language, it runs&lt;br /&gt;
on Python 2.7, 3.3 or higher and it is tested and developed on Linux. It uses&lt;br /&gt;
a ConfigParser format for configuration files. It supports a variety of geospatial&lt;br /&gt;
software and tools such as GRASS GIS, R Project or the GDAL library. Synchronous&lt;br /&gt;
and asynchronuous invocations are supported. As for request encoding, two options&lt;br /&gt;
are available - key-value pairs (using HTTP-GET) or XML payload (using HTTPPOST).&lt;br /&gt;
Every process that is to be deployed on the server is defined as a class&lt;br /&gt;
and has several mandatory parameters. The key parameter called &amp;quot;handler&amp;quot; gets&lt;br /&gt;
invoked every time there is an incoming request, it accepts the request and returns&lt;br /&gt;
a response.&lt;br /&gt;
&lt;br /&gt;
In 2016, it upgraded from PyWPS 3 to PyWPS 4. Some of the more significant&lt;br /&gt;
changes include every input being considered a list of inputs and all inputs having&lt;br /&gt;
file, data and stream attributes. These attributes allow better manipulation&lt;br /&gt;
with data.&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&lt;br /&gt;
Python is a high-level programming language that fully supports object-oriented and&lt;br /&gt;
structured programming. Developed in the late 1980s, the first version 0.9.0 was&lt;br /&gt;
released in 1991. In 2008, Python 3.0 was released. Currently, the most up-to-date&lt;br /&gt;
version available is 3.6.&lt;br /&gt;
It was designed as a syntactically simple language, using whitespace intendantion&lt;br /&gt;
instead of brackets and English words rather than punctuation. It is a dynamicallytyped&lt;br /&gt;
language, which means it is not neccessary to specify a data-type when defining&lt;br /&gt;
a variable. For its simplicity and readability, Python is often considered a good&lt;br /&gt;
first programming language to learn.&lt;br /&gt;
One of the key advantages of Python is its high extensibility. It provides large&lt;br /&gt;
standard libraries and also an extensive number of other modules, packages and&lt;br /&gt;
libraries, so most of the common programming tasks are already solved, scripted&lt;br /&gt;
and made available.&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Dates !! Task&lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period (April, 23 - May, 14) || &lt;br /&gt;
Initial research on GDAL, MapServer, SQLAlchemy, GeoAlchemy, relational databases (PostgreSQL, Oracle, Microsoft SQL Server, MySQL, SQLite,...) &lt;br /&gt;
&lt;br /&gt;
Select which databases will be supported in this project.&lt;br /&gt;
&lt;br /&gt;
Set up environment for work - virtual environment with a distribution of Linux, instances of selected database management systems for testing.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 1 (May, 14 - May, 20) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Define “DbStorage”, an abstract base class that will ensure derived classes implement particular methods from this class. Define abstract methods that are necessary for writing output data to a remote database.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 2 (May, 21 - May, 27) ||&lt;br /&gt;
&lt;br /&gt;
Write test script that checks “PgStorage” will work correctly and write output vector data to a PostgreSQL database.&lt;br /&gt;
&lt;br /&gt;
Develop “PgStorage“ class that inherits from “DbStorage” and implements proposed functionality.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 3 (May, 28 - June, 3) ||&lt;br /&gt;
&lt;br /&gt;
Write a test (or update test written in the previous week) to ensure correct functionality of newly developed classes.&lt;br /&gt;
&lt;br /&gt;
Develop several classes based on selection in week 1 – e.g. “MSSQLStorage”, “OCIStorage”, “MySQLStorage”, etc.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 4 (June, 4 - June, 10) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Develop a mechanism for handling raster output data and implement it in the above-mentioned classes. If GDAL does not support writing raster data to a specific database by default, appropriate tool or library must be identified. For example, for writing raster data into PostgreSQL, ”raster2pgsql“ tool can be used.&lt;br /&gt;
&lt;br /&gt;
Decide how other types of data (such as string, table, CSV, etc.) will be handled and implement it.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 5 (June, 11 - June, 15) Phase 1 Evaluation||&lt;br /&gt;
&lt;br /&gt;
Write a test that checks all data types will get correctly stored in database.&lt;br /&gt;
&lt;br /&gt;
Write and submit weekly report.&lt;br /&gt;
&lt;br /&gt;
Write and submit Phase 1 evaluation.&lt;br /&gt;
&lt;br /&gt;
'''Deliverables for Phase 1:''' Correctly functioning and tested module that enables output data (vector, raster or other) to be stored in one of several database management systems.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 6 (June, 16 - June, 24) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Handle metadata. Currently, logs with information about run processes (such as when a process started and finished) are stored in a SQLite database. Implement a functionality that accesses logs, extracts desired metadata from them and saves them in the same database as output data. Use unique identifier of every process to join metadata (using primary key) with the corresponding output data (foreign key). For each run process, include expiration date to its output data.&lt;br /&gt;
&lt;br /&gt;
Develop a trigger that removes output data when it expires.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 7 (June, 25 - July, 1) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Establish a connection between database and MapServer and allow MapServer to access output data stored in database.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 8 (July, 2 - July, 8) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable output data to be viewed as WMS services through MapServer.&lt;br /&gt;
&lt;br /&gt;
Edit current code so the reference embodied in the responding document is a URL link to a running MapServer service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 9 (July, 9 - July, 13) Phase 2 Evaluation||&lt;br /&gt;
&lt;br /&gt;
Write and submit Phase 2 evaluation.&lt;br /&gt;
&lt;br /&gt;
'''Deliverables for Phase 2''': Correctly functioning and tested module that enables output data to be viewed as a Web Map Service using MapServer.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 10 (July, 14 - July, 22) ||&lt;br /&gt;
&lt;br /&gt;
Update previously developed test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable raster output data to be accessed and/or edited as OGC Web Coverage Service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 11 (July, 23 - July, 29) ||&lt;br /&gt;
&lt;br /&gt;
Update previously developed test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable vector output data to be accessed and/or edited as OGC Web Feature Service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 12 (July, 30 - August, 5) ||&lt;br /&gt;
&lt;br /&gt;
Write a test that ensures newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Develop a demo that demonstrates implemented functionality.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 13 (August, 6 - August, 14)&lt;br /&gt;
&lt;br /&gt;
||Create documentation that can be added to the current PyWPS documentation.&lt;br /&gt;
&lt;br /&gt;
Finalize work, clean code and prepare a pull request(s) to PyWPS GitHub repository.&lt;br /&gt;
&lt;br /&gt;
Write and submit final report.&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Reports ==&lt;br /&gt;
&lt;br /&gt;
[[Category: Google Summer of Code]]&lt;/div&gt;</summary>
		<author><name>Wiki-Janpisl</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Google_Summer_of_Code_2018_Accepted&amp;diff=114748</id>
		<title>Google Summer of Code 2018 Accepted</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Google_Summer_of_Code_2018_Accepted&amp;diff=114748"/>
		<updated>2018-05-03T19:47:18Z</updated>

		<summary type="html">&lt;p&gt;Wiki-Janpisl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;center&amp;gt;&lt;br /&gt;
[[Image:GSoC2016Logo.jpg|400px|link=https://developers.google.com/open-source/gsoc/]] &amp;lt;font size=&amp;quot;+3&amp;quot;&amp;gt; @ &amp;lt;/font&amp;gt; &lt;br /&gt;
[[Image:Osgeo-logo.png|300px|link=http://www.osgeo.org]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Back to the main OSGeo [[Google Summer of Code 2018]] @ OSGeo wiki page.&lt;br /&gt;
&lt;br /&gt;
== Accepted Proposals ==&lt;br /&gt;
&lt;br /&gt;
This year OSGeo accepted 13 students working on the following projects:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;   border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; rules=&amp;quot;all&amp;quot; style=&amp;quot;margin:1em 1em 1em 0; border:solid 1px #AAAAAA; border-collapse:collapse; background-color:#D7E3D1; font-size:95%; empty-cells:show;&amp;quot; &lt;br /&gt;
|'''Community'''&lt;br /&gt;
|'''Project'''&lt;br /&gt;
|'''Student'''&lt;br /&gt;
|'''1st mentor'''&lt;br /&gt;
|'''2nd mentor'''&lt;br /&gt;
|'''3rd mentor'''&lt;br /&gt;
|'''Wiki page'''&lt;br /&gt;
|'''Repository'''&lt;br /&gt;
|-&lt;br /&gt;
|Gisquick&lt;br /&gt;
|Extension of Gisquick platform filtering tool based on raster and vector spatio-temporal data&lt;br /&gt;
|David Těthal&lt;br /&gt;
|Marcel Dancák&lt;br /&gt;
|Martin Landa&lt;br /&gt;
|&lt;br /&gt;
|https://github.com/davidtethal/gisquick-gsoc2017/wiki&lt;br /&gt;
|https://github.com/davidtethal&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|GRASS GIS&lt;br /&gt;
|GRASS GIS module for Sentinel-2 cloud and shadow detection&lt;br /&gt;
|Roberta Fagadini&lt;br /&gt;
|Roberto Marzocchi&lt;br /&gt;
|Moritz Lennert&lt;br /&gt;
|&lt;br /&gt;
|https://trac.osgeo.org/grass/wiki/GSoC/2018/CloudsAndShadowsDetection&lt;br /&gt;
|https://github.com/RobiFag/GRASS_clouds_and_shadows.git&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|GRASS GIS&lt;br /&gt;
|Improve GRASS GIS integration in QGIS 3&lt;br /&gt;
|Radek Novotný&lt;br /&gt;
|Vaclav Petras&lt;br /&gt;
|Martin Landa&lt;br /&gt;
|&lt;br /&gt;
|https://trac.osgeo.org/grass/wiki/GSoC/2018/IntegrationInQGIS3&lt;br /&gt;
|https://github.com/radeknovotny94/GRASSIntegrationInQGIS3&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|GRASS GIS&lt;br /&gt;
|Full support of Python 3 in GRASS GIS&lt;br /&gt;
|Sanjeet Bhatti&lt;br /&gt;
|Anna Petrášová&lt;br /&gt;
|Luca Delucchi&lt;br /&gt;
|&lt;br /&gt;
|https://trac.osgeo.org/grass/wiki/GSoC/2018/FullSupportPython3&lt;br /&gt;
|https://github.com/sanjeetbhatti/FullSupportPython3&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|istSOS&lt;br /&gt;
|Support of Unit Of Measure conversion in istSOS3&lt;br /&gt;
|Rahul Chauhan&lt;br /&gt;
|MASSIMILIANO CANNATA&lt;br /&gt;
|Milan Antonovic&lt;br /&gt;
|&lt;br /&gt;
|https://wiki.osgeo.org/wiki/GSoC_18:_istSOS-Support_of_Unit_Of_Measure_conversion_in_istSOS3&lt;br /&gt;
|https://github.com/rahulworld/Support-of-Unit-Of-Measure-conversion-in-istSOS3&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|MapMint4ME&lt;br /&gt;
|Supporting Other Geometries Recording&lt;br /&gt;
|Iba DIOUF&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|NASA Web World Wind &lt;br /&gt;
|Support for WFS Format&lt;br /&gt;
|Garima Natani&lt;br /&gt;
|Jakub Balhar&lt;br /&gt;
|Gabriele Prestifilippo&lt;br /&gt;
|&lt;br /&gt;
|https://wiki.osgeo.org/wiki/GSoC_2018_NASA-ESA_WebWorldWind_Support_for_WFS_Format&lt;br /&gt;
|https://github.com/NASAWorldWind/WebWorldWind&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|pgRouting &lt;br /&gt;
|Implement Minimum Spanning Tree and Min-Cut for pgRouting by the Boost Graph Library.&lt;br /&gt;
|Aditya Pratap Singh&lt;br /&gt;
|Rohith Reddy Sankepally  @iamrohith94&lt;br /&gt;
|Vihan Jain - @vidhan13j07&lt;br /&gt;
|&lt;br /&gt;
|https://github.com/pgRouting/pgrouting/wiki/GSoC-2018-MST-and-Mincut&lt;br /&gt;
|https://github.com/pgRouting/pgrouting/tree/gsoc/mincut&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|pgRouting &lt;br /&gt;
|Making pgRoutingLayer plugin compatible with QGIS 3.0 and Adding GUI support for proposed stable functions which are scheduled for next release.&lt;br /&gt;
|Aasheesh Tiwari&lt;br /&gt;
|Cayetano Benavent @cayetanobv&lt;br /&gt;
|Vicky Vergara @cvvergara&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|https://github.com/pgRouting/pgRoutingLayer/tree/gsoc/python3&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|pgRouting &lt;br /&gt;
|Implement Minimum-cost flow Algorithm by the Boost Graph Library and Chinese Postman Problem for pgRouting&lt;br /&gt;
|Maoguang Wang&lt;br /&gt;
|Vihan Jain - @vidhan13j07&lt;br /&gt;
|Daniel Kastl - @dkastl&lt;br /&gt;
|&lt;br /&gt;
|https://github.com/pgRouting/pgrouting/wiki/GSoC-2018-Minimum-cost-flow-and-ChPP&lt;br /&gt;
|https://github.com/pgRouting/pgrouting/tree/gsoc/ch_postman&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|pgRouting &lt;br /&gt;
|Implement Parallel Dijkstra’s and Bellman-Ford algorithm by the Parallel BGL&lt;br /&gt;
|Sourabh Garg&lt;br /&gt;
|Vicky Vergara @cvvergara&lt;br /&gt;
|Daniel Kastl - @dkastl&lt;br /&gt;
|&lt;br /&gt;
|https://github.com/pgRouting/pgrouting/wiki/GSoC-2018-Parallel-Dijkstra-and-Bellman-Ford&lt;br /&gt;
|https://github.com/pgRouting/pgrouting/tree/gsoc/bellford-pdijkstra&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|PostGIS &lt;br /&gt;
|Implement Geospatial Data Viewer in pgAdmin4 for PostGIS&lt;br /&gt;
|Xuri Gong&lt;br /&gt;
|Victoria Rautenbach&lt;br /&gt;
|Frikan Erwee&lt;br /&gt;
|&lt;br /&gt;
|https://trac.osgeo.org/postgis/wiki/GeospatialDataViewerInPgAdmin4ForPostGIS&lt;br /&gt;
|https://github.com/Gooong/pgadmin4&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|PyWPS &lt;br /&gt;
|Database Output Storage for PyWPS&lt;br /&gt;
|Jan Pišl&lt;br /&gt;
|Jachym Cepicky&lt;br /&gt;
|Martin Landa&lt;br /&gt;
|&lt;br /&gt;
|https://wiki.osgeo.org/wiki/DatabaseOutputStorageforPyWPS&lt;br /&gt;
|https://github.com/janpisl/Database-Output-Storage-for-PyWPS&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Wiki-Janpisl</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Database_Output_Storage_for_PyWPS&amp;diff=114747</id>
		<title>Database Output Storage for PyWPS</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Database_Output_Storage_for_PyWPS&amp;diff=114747"/>
		<updated>2018-05-03T19:46:34Z</updated>

		<summary type="html">&lt;p&gt;Wiki-Janpisl: Created page with &amp;quot;== Introduction == My name is Jan Pisl and I study at the Czech Technical University in Prague. I will be participating in this year's GSoC. My project’s aim is to develop d...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
My name is Jan Pisl and I study at the Czech Technical University in Prague. I will be participating in this year's GSoC. My project’s aim is to develop database storage support for PyWPS that would allow output data to be stored in a database in a way that is compliant with the OGC WPS Standard. I will be using Python 3.6. &lt;br /&gt;
&lt;br /&gt;
== Project ==&lt;br /&gt;
Title: Database Output Storage for PyWPS&lt;br /&gt;
&lt;br /&gt;
Student: Jan Pišl&lt;br /&gt;
&lt;br /&gt;
Mentors: [[User:Jachym|Jáchym Čepický]], [[User:Martinl|Martin Landa]].&lt;br /&gt;
&lt;br /&gt;
Project's repositories: [https://github.com/janpisl/Database-Output-Storage-for-PyWPS GitHub repository], [https://summerofcode.withgoogle.com/projects/#5084513521106944 Project's page on GSoC website] &lt;br /&gt;
&lt;br /&gt;
== Technology ==&lt;br /&gt;
&lt;br /&gt;
=== PyWPS ===&lt;br /&gt;
PyWPS is a server side implementation of the OGC Web Processing Service (OGC&lt;br /&gt;
WPS) standards 1.0.0. It is written in the Python programming language, it runs&lt;br /&gt;
on Python 2.7, 3.3 or higher and it is tested and developed on Linux. It uses&lt;br /&gt;
a ConfigParser format for configuration files. It supports a variety of geospatial&lt;br /&gt;
software and tools such as GRASS GIS, R Project or the GDAL library. Synchronous&lt;br /&gt;
and asynchronuous invocations are supported. As for request encoding, two options&lt;br /&gt;
are available - key-value pairs (using HTTP-GET) or XML payload (using HTTPPOST).&lt;br /&gt;
Every process that is to be deployed on the server is defined as a class&lt;br /&gt;
and has several mandatory parameters. The key parameter called &amp;quot;handler&amp;quot; gets&lt;br /&gt;
invoked every time there is an incoming request, it accepts the request and returns&lt;br /&gt;
a response.&lt;br /&gt;
&lt;br /&gt;
In 2016, it upgraded from PyWPS 3 to PyWPS 4. Some of the more significant&lt;br /&gt;
changes include every input being considered a list of inputs and all inputs having&lt;br /&gt;
file, data and stream attributes. These attributes allow better manipulation&lt;br /&gt;
with data.&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&lt;br /&gt;
Python is a high-level programming language that fully supports object-oriented and&lt;br /&gt;
structured programming. Developed in the late 1980s, the first version 0.9.0 was&lt;br /&gt;
released in 1991. In 2008, Python 3.0 was released. Currently, the most up-to-date&lt;br /&gt;
version available is 3.6.&lt;br /&gt;
It was designed as a syntactically simple language, using whitespace intendantion&lt;br /&gt;
instead of brackets and English words rather than punctuation. It is a dynamicallytyped&lt;br /&gt;
language, which means it is not neccessary to specify a data-type when defining&lt;br /&gt;
a variable. For its simplicity and readability, Python is often considered a good&lt;br /&gt;
first programming language to learn.&lt;br /&gt;
One of the key advantages of Python is its high extensibility. It provides large&lt;br /&gt;
standard libraries and also an extensive number of other modules, packages and&lt;br /&gt;
libraries, so most of the common programming tasks are already solved, scripted&lt;br /&gt;
and made available.&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Dates !! Task&lt;br /&gt;
|-&lt;br /&gt;
| Bonding Period (April, 23 - May, 14) || &lt;br /&gt;
Initial research on GDAL, MapServer, SQLAlchemy, GeoAlchemy, relational databases (PostgreSQL, Oracle, Microsoft SQL Server, MySQL, SQLite,...) &lt;br /&gt;
&lt;br /&gt;
Select which databases will be supported in this project.&lt;br /&gt;
&lt;br /&gt;
Set up environment for work - virtual environment with a distribution of Linux, instances of selected database management systems for testing.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 1 (May, 14 - May, 20) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Define “DbStorage”, an abstract base class that will ensure derived classes implement particular methods from this class. Define abstract methods that are necessary for writing output data to a remote database.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 2 (May, 21 - May, 27) ||&lt;br /&gt;
&lt;br /&gt;
Write test script that checks “PgStorage” will work correctly and write output vector data to a PostgreSQL database.&lt;br /&gt;
&lt;br /&gt;
Develop “PgStorage“ class that inherits from “DbStorage” and implements proposed functionality.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 3 (May, 28 - June, 3) ||&lt;br /&gt;
&lt;br /&gt;
Write a test (or update test written in the previous week) to ensure correct functionality of newly developed classes.&lt;br /&gt;
&lt;br /&gt;
Develop several classes based on selection in week 1 – e.g. “MSSQLStorage”, “OCIStorage”, “MySQLStorage”, etc.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 4 (June, 4 - June, 10) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Develop a mechanism for handling raster output data and implement it in the above-mentioned classes. If GDAL does not support writing raster data to a specific database by default, appropriate tool or library must be identified. For example, for writing raster data into PostgreSQL, ”raster2pgsql“ tool can be used.&lt;br /&gt;
&lt;br /&gt;
Decide how other types of data (such as string, table, CSV, etc.) will be handled and implement it.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 5 (June, 11 - June, 15) Phase 1 Evaluation||&lt;br /&gt;
&lt;br /&gt;
Write a test that checks all data types will get correctly stored in database.&lt;br /&gt;
&lt;br /&gt;
Write and submit weekly report.&lt;br /&gt;
&lt;br /&gt;
Write and submit Phase 1 evaluation.&lt;br /&gt;
&lt;br /&gt;
'''Deliverables for Phase 1:''' Correctly functioning and tested module that enables output data (vector, raster or other) to be stored in one of several database management systems.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 6 (June, 16 - June, 24) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Handle metadata. Currently, logs with information about run processes (such as when a process started and finished) are stored in a SQLite database. Implement a functionality that accesses logs, extracts desired metadata from them and saves them in the same database as output data. Use unique identifier of every process to join metadata (using primary key) with the corresponding output data (foreign key). For each run process, include expiration date to its output data.&lt;br /&gt;
&lt;br /&gt;
Develop a trigger that removes output data when it expires.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 7 (June, 25 - July, 1) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Establish a connection between database and MapServer and allow MapServer to access output data stored in database.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 8 (July, 2 - July, 8) ||&lt;br /&gt;
&lt;br /&gt;
Write a test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable output data to be viewed as WMS services through MapServer.&lt;br /&gt;
&lt;br /&gt;
Edit current code so the reference embodied in the responding document is a URL link to a running MapServer service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 9 (July, 9 - July, 13) Phase 2 Evaluation||&lt;br /&gt;
&lt;br /&gt;
Write and submit Phase 2 evaluation.&lt;br /&gt;
&lt;br /&gt;
'''Deliverables for Phase 2''': Correctly functioning and tested module that enables output data to be viewed as a Web Map Service using MapServer.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 10 (July, 14 - July, 22) ||&lt;br /&gt;
&lt;br /&gt;
Update previously developed test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable raster output data to be accessed and/or edited as OGC Web Coverage Service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 11 (July, 23 - July, 29) ||&lt;br /&gt;
&lt;br /&gt;
Update previously developed test to ensure newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Enable vector output data to be accessed and/or edited as OGC Web Feature Service.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 12 (July, 30 - August, 5) ||&lt;br /&gt;
&lt;br /&gt;
Write a test that ensures newly implemented functionality will work correctly.&lt;br /&gt;
&lt;br /&gt;
Develop a demo that demonstrates implemented functionality.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Week 13 (August, 6 - August, 14)&lt;br /&gt;
&lt;br /&gt;
||Create documentation that can be added to the current PyWPS documentation.&lt;br /&gt;
&lt;br /&gt;
Finalize work, clean code and prepare a pull request(s) to PyWPS GitHub repository.&lt;br /&gt;
&lt;br /&gt;
Write and submit final report.&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Reports ==&lt;br /&gt;
&lt;br /&gt;
[[Category: Google Summer of Code]]&lt;/div&gt;</summary>
		<author><name>Wiki-Janpisl</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Google_Summer_of_Code_2018_Accepted&amp;diff=114639</id>
		<title>Google Summer of Code 2018 Accepted</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Google_Summer_of_Code_2018_Accepted&amp;diff=114639"/>
		<updated>2018-04-26T17:13:10Z</updated>

		<summary type="html">&lt;p&gt;Wiki-Janpisl: /* Accepted Proposals */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;center&amp;gt;&lt;br /&gt;
[[Image:GSoC2016Logo.jpg|400px|link=https://developers.google.com/open-source/gsoc/]] &amp;lt;font size=&amp;quot;+3&amp;quot;&amp;gt; @ &amp;lt;/font&amp;gt; &lt;br /&gt;
[[Image:Osgeo-logo.png|300px|link=http://www.osgeo.org]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Back to the main OSGeo [[Google Summer of Code 2018]] @ OSGeo wiki page.&lt;br /&gt;
&lt;br /&gt;
== Accepted Proposals ==&lt;br /&gt;
&lt;br /&gt;
This year OSGeo accepted 13 students working on the following projects:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;   border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; rules=&amp;quot;all&amp;quot; style=&amp;quot;margin:1em 1em 1em 0; border:solid 1px #AAAAAA; border-collapse:collapse; background-color:#D7E3D1; font-size:95%; empty-cells:show;&amp;quot; &lt;br /&gt;
|'''Community'''&lt;br /&gt;
|'''Project'''&lt;br /&gt;
|'''Student'''&lt;br /&gt;
|'''1st mentor'''&lt;br /&gt;
|'''2nd mentor'''&lt;br /&gt;
|'''3rd mentor'''&lt;br /&gt;
|'''Wiki page'''&lt;br /&gt;
|'''Repository'''&lt;br /&gt;
|-&lt;br /&gt;
|Gisquick&lt;br /&gt;
|Extension of Gisquick platform filtering tool based on raster and vector spatio-temporal data&lt;br /&gt;
|David Těthal&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|GRASS GIS&lt;br /&gt;
|GRASS GIS module for Sentinel-2 cloud and shadow detection&lt;br /&gt;
|Roberta Fagadini&lt;br /&gt;
|Roberto Marzocchi&lt;br /&gt;
|Moritz Lennert&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|https://github.com/RobiFag/GRASS_clouds_and_shadows.git&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|GRASS GIS&lt;br /&gt;
|Improve GRASS GIS integration in QGIS 3&lt;br /&gt;
|Radek Novotný&lt;br /&gt;
|Vaclav Petras&lt;br /&gt;
|Martin Landa&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|GRASS GIS&lt;br /&gt;
|Full support of Python 3 in GRASS GIS&lt;br /&gt;
|Sanjeet Bhatti&lt;br /&gt;
|Anna Petrasova&lt;br /&gt;
|Luca Delucchi&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|istSOS&lt;br /&gt;
|Support of Unit Of Measure conversion in istSOS3&lt;br /&gt;
|Rahul Chauhan&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|MapMint4ME&lt;br /&gt;
|Supporting Other Geometries Recording&lt;br /&gt;
|Iba DIOUF&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|NASA Web World Wind &lt;br /&gt;
|Support for WFS Format&lt;br /&gt;
|Garima Natani&lt;br /&gt;
|Jakub Balhar&lt;br /&gt;
|Gabriele Prestifilippo&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|pgRouting &lt;br /&gt;
|Implement Minimum Spanning Tree and Min-Cut for pgRouting by the Boost Graph Library.&lt;br /&gt;
|Aditya Pratap Singh&lt;br /&gt;
|Rohith Reddy Sankepally  @iamrohith94&lt;br /&gt;
|Vihan Jain - @vidhan13j07&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|https://github.com/pgRouting/pgrouting/tree/gsoc/mincut&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|pgRouting &lt;br /&gt;
|Making pgRoutingLayer plugin compatible with QGIS 3.0 and Adding GUI support for proposed stable functions which are scheduled for next release.&lt;br /&gt;
|Aasheesh Tiwari&lt;br /&gt;
|Cayetano Benavent @cayetanobv&lt;br /&gt;
|Vicky Vergara @cvvergara&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|https://github.com/pgRouting/pgRoutingLayer/tree/gsoc/python3&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|pgRouting &lt;br /&gt;
|Implement Minimum-cost flow Algorithm by the Boost Graph Library and Chinese Postman Problem for pgRouting&lt;br /&gt;
|Maoguang Wang&lt;br /&gt;
|Vihan Jain - @vidhan13j07&lt;br /&gt;
|Daniel Kastl - @dkastl&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|https://github.com/pgRouting/pgrouting/tree/gsoc/ch_postman&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|pgRouting &lt;br /&gt;
|Implement Parallel Dijkstra’s and Bellman-Ford algorithm by the Parallel BGL&lt;br /&gt;
|Sourabh Garg&lt;br /&gt;
|Vicky Vergara @cvvergara&lt;br /&gt;
|Daniel Kastl - @dkastl&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|https://github.com/pgRouting/pgrouting/tree/gsoc/bellford-pdijkstra&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|PostGIS &lt;br /&gt;
|Implement Geospatial Data Viewer in pgAdmin4 for PostGIS&lt;br /&gt;
|Xuri Gong&lt;br /&gt;
|Victoria Rautenbach&lt;br /&gt;
|Frikan Erwee&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|PyWPS &lt;br /&gt;
|Database Output Storage for PyWPS&lt;br /&gt;
|Jan Pišl&lt;br /&gt;
|Jachym Cepicky&lt;br /&gt;
|Martin Landa&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|https://github.com/janpisl/Database-Output-Storage-for-PyWPS&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Wiki-Janpisl</name></author>
	</entry>
	<entry>
		<id>https://wiki.osgeo.org/w/index.php?title=Google_Summer_of_Code_2018_Accepted&amp;diff=114638</id>
		<title>Google Summer of Code 2018 Accepted</title>
		<link rel="alternate" type="text/html" href="https://wiki.osgeo.org/w/index.php?title=Google_Summer_of_Code_2018_Accepted&amp;diff=114638"/>
		<updated>2018-04-26T17:12:31Z</updated>

		<summary type="html">&lt;p&gt;Wiki-Janpisl: Add GitHub repository&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;center&amp;gt;&lt;br /&gt;
[[Image:GSoC2016Logo.jpg|400px|link=https://developers.google.com/open-source/gsoc/]] &amp;lt;font size=&amp;quot;+3&amp;quot;&amp;gt; @ &amp;lt;/font&amp;gt; &lt;br /&gt;
[[Image:Osgeo-logo.png|300px|link=http://www.osgeo.org]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Back to the main OSGeo [[Google Summer of Code 2018]] @ OSGeo wiki page.&lt;br /&gt;
&lt;br /&gt;
== Accepted Proposals ==&lt;br /&gt;
&lt;br /&gt;
This year OSGeo accepted 13 students working on the following projects:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;   border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; rules=&amp;quot;all&amp;quot; style=&amp;quot;margin:1em 1em 1em 0; border:solid 1px #AAAAAA; border-collapse:collapse; background-color:#D7E3D1; font-size:95%; empty-cells:show;&amp;quot; &lt;br /&gt;
|'''Community'''&lt;br /&gt;
|'''Project'''&lt;br /&gt;
|'''Student'''&lt;br /&gt;
|'''1st mentor'''&lt;br /&gt;
|'''2nd mentor'''&lt;br /&gt;
|'''3rd mentor'''&lt;br /&gt;
|'''Wiki page'''&lt;br /&gt;
|'''Repository'''&lt;br /&gt;
|-&lt;br /&gt;
|Gisquick&lt;br /&gt;
|Extension of Gisquick platform filtering tool based on raster and vector spatio-temporal data&lt;br /&gt;
|David Těthal&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|GRASS GIS&lt;br /&gt;
|GRASS GIS module for Sentinel-2 cloud and shadow detection&lt;br /&gt;
|Roberta Fagadini&lt;br /&gt;
|Roberto Marzocchi&lt;br /&gt;
|Moritz Lennert&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|https://github.com/RobiFag/GRASS_clouds_and_shadows.git&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|GRASS GIS&lt;br /&gt;
|Improve GRASS GIS integration in QGIS 3&lt;br /&gt;
|Radek Novotný&lt;br /&gt;
|Vaclav Petras&lt;br /&gt;
|Martin Landa&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|GRASS GIS&lt;br /&gt;
|Full support of Python 3 in GRASS GIS&lt;br /&gt;
|Sanjeet Bhatti&lt;br /&gt;
|Anna Petrasova&lt;br /&gt;
|Luca Delucchi&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|istSOS&lt;br /&gt;
|Support of Unit Of Measure conversion in istSOS3&lt;br /&gt;
|Rahul Chauhan&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|MapMint4ME&lt;br /&gt;
|Supporting Other Geometries Recording&lt;br /&gt;
|Iba DIOUF&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|NASA Web World Wind &lt;br /&gt;
|Support for WFS Format&lt;br /&gt;
|Garima Natani&lt;br /&gt;
|Jakub Balhar&lt;br /&gt;
|Gabriele Prestifilippo&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|pgRouting &lt;br /&gt;
|Implement Minimum Spanning Tree and Min-Cut for pgRouting by the Boost Graph Library.&lt;br /&gt;
|Aditya Pratap Singh&lt;br /&gt;
|Rohith Reddy Sankepally  @iamrohith94&lt;br /&gt;
|Vihan Jain - @vidhan13j07&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|https://github.com/pgRouting/pgrouting/tree/gsoc/mincut&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|pgRouting &lt;br /&gt;
|Making pgRoutingLayer plugin compatible with QGIS 3.0 and Adding GUI support for proposed stable functions which are scheduled for next release.&lt;br /&gt;
|Aasheesh Tiwari&lt;br /&gt;
|Cayetano Benavent @cayetanobv&lt;br /&gt;
|Vicky Vergara @cvvergara&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|https://github.com/pgRouting/pgRoutingLayer/tree/gsoc/python3&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|pgRouting &lt;br /&gt;
|Implement Minimum-cost flow Algorithm by the Boost Graph Library and Chinese Postman Problem for pgRouting&lt;br /&gt;
|Maoguang Wang&lt;br /&gt;
|Vihan Jain - @vidhan13j07&lt;br /&gt;
|Daniel Kastl - @dkastl&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|https://github.com/pgRouting/pgrouting/tree/gsoc/ch_postman&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|pgRouting &lt;br /&gt;
|Implement Parallel Dijkstra’s and Bellman-Ford algorithm by the Parallel BGL&lt;br /&gt;
|Sourabh Garg&lt;br /&gt;
|Vicky Vergara @cvvergara&lt;br /&gt;
|Daniel Kastl - @dkastl&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|https://github.com/pgRouting/pgrouting/tree/gsoc/bellford-pdijkstra&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|PostGIS &lt;br /&gt;
|Implement Geospatial Data Viewer in pgAdmin4 for PostGIS&lt;br /&gt;
|Xuri Gong&lt;br /&gt;
|Victoria Rautenbach&lt;br /&gt;
|Frikan Erwee&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|PyWPS &lt;br /&gt;
|Database Output Storage for PyWPS&lt;br /&gt;
|Jan Pišl&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|https://github.com/janpisl/Database-Output-Storage-for-PyWPS&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Wiki-Janpisl</name></author>
	</entry>
</feed>