<div dir="ltr"><span id="gmail-docs-internal-guid-523c2d1c-7fff-0ccd-d0b1-a5279c21a2f9"><p dir="ltr" style="line-height:1.38;margin-top:10pt;margin-bottom:0pt;padding:0pt 0pt 10pt"><span style="font-size:9.5pt;font-family:Arial;background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">Hello everyone,</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:10pt"><span style="font-size:9.5pt;font-family:Arial;background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">It had been a great experience with a lot of learning in the past 3 months. You can find my final report </span><a href="https://github.com/alex-mathew/pygeoapi/wiki/Final-Report-GSoC-2020" style="text-decoration-line:none"><span style="font-size:9.5pt;font-family:Arial;background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;text-decoration-line:underline;vertical-align:baseline;white-space:pre-wrap">here</span></a><span style="font-size:9.5pt;font-family:Arial;background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">. This report is in accordance with the </span>guidelines set by <a href="https://developers.google.com/open-source/gsoc/help/work-product">Google</a><span style="font-size:9.5pt;font-family:Arial;background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap"> and </span><a href="https://lists.osgeo.org/pipermail/soc/2020-August/004612.html">OSGeo GSoC Admins</a><span style="font-size:9.5pt;font-family:Arial;background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">.</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:10pt"><span style="font-size:9.5pt;font-family:Arial;background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap"><b>Title</b> - Simple Data Transactions in pygeoapi</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:10pt"><span style="font-size:9.5pt;font-family:Arial;background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap"><b>Organization</b> - pygeoapi under OSGeo</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:10pt"><span style="font-size:9.5pt;font-family:Arial;background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap"><b>Abstract</b> - pygeoapi is a python server implementation of OGC RESTful API standards. OGC API - Features provide API building blocks to create, modify, and query features on the Web. It consists of multiple parts, each of them is a separate standard. The project focuses on Implementing support for Simple Transactions in pygeoapi. Simple Transactions means transactions on a single data item (feature). This makes pygeoapi a complete CRUD (Create-Read-Update-Delete) solution for features on the web.</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:10pt"><span style="font-size:9.5pt;font-family:Arial;background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap"><b>State of the Project Before GSoC - </b></span><span style="background-color:transparent;font-family:Arial;font-size:9.5pt;white-space:pre-wrap">pygeoapi had only Part 1 (Core) and Part 2 (CRS by Reference) implementations of OGC API - Features implemented. So the only operation supported was GET.</span></p><b>The addition that my project brought to pygeoapi</b></span><div><span>Implemented <i>Part 4: Simple Transactions of OGC API - Features</i>. This includes:<br><i>POST</i>: Inserts a new feature item into a collection<br><i>PUT</i>: Replaces an existing feature item in a collection<br><i>PATCH</i>: Updates an existing feature item in a collection<br><i>DELETE</i>: Deletes an existing feature item from a collection</span><div><br></div><div><b>Summary of Work done<br></b>i. Created a sample openapi specification doc in accordance with Simple Transactions Proposal<br>ii. Generated the proposed openapi doc from pygeoapi config<br>iii. Defined REST endpoints for simple transactions (POST, PUT, PATCH, DELETE) in Flask and Starlette<br>iv. Updated pygeoapi core API to handle feature transactions<br>v. Implemented simple transactions in schemaless data providers - GeoJSON, CSV<br>vi. Implemented simple transactions in schemaful data providers - PostgreSQL, SQLite</div><div><br></div><div><b>What is left to implement</b></div><div>There is a bug left unfixed in transaction implementation for the SQLite provider. The geometry from the POST payload is not getting loaded into the SQLite table.</div><div><br></div><div><b>Future Opportunities</b></div><div>Currently, transactions have been implemented in 4 of the data providers which come out of the box with pygeoapi - GeoJSON, CSV, Postgres, SQLite. This can be extended to other data providers like Elasticsearch.</div><div><br></div><div><b>Links</b></div><div>i. Link to Repository:</div><div><a href="https://github.com/alex-mathew/pygeoapi">https://github.com/alex-mathew/pygeoapi</a><b><br></b></div><div>ii. User documentation for transactions extension:</div><div><a href="https://pygeoapi-data-transaction.readthedocs.io/en/data-transaction-gsoc-3/configuration.html#data-transactions">https://pygeoapi-data-transaction.readthedocs.io/en/data-transaction-gsoc-3/configuration.html#data-transactions</a><br></div><div><a href="https://pygeoapi-data-transaction.readthedocs.io/en/data-transaction-gsoc-3/data-transactions.html">https://pygeoapi-data-transaction.readthedocs.io/en/data-transaction-gsoc-3/data-transactions.html</a></div><div>iii. OSGeo wiki link of the project:</div><div><a href="https://pygeoapi-data-transaction.readthedocs.io/en/data-transaction-gsoc-3/data-transactions.html"> https://wiki.osgeo.org/wiki/GSoC_2020_Data_transaction_implementation_on_pygeoapi</a></div><div>iv. Pull Requests:</div><div><a href="https://github.com/geopython/pygeoapi/pull/483">https://github.com/geopython/pygeoapi/pull/483<br></a></div><div><a href="https://github.com/geopython/pygeoapi/pull/518">https://github.com/geopython/pygeoapi/pull/518<br></a></div><div><a href="https://github.com/geopython/pygeoapi/pull/524">https://github.com/geopython/pygeoapi/pull/524<br></a></div><div>v. GitHub Wiki Page:</div><div><a href="https://github.com/alex-mathew/pygeoapi/wiki/Final-Report-GSoC-2020">https://github.com/alex-mathew/pygeoapi/wiki/Final-Report-GSoC-2020<br></a></div><div><br></div><div>Thanks,</div><div>Alex Mathew</div><div><span><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:10pt"><span style="font-size:9.5pt;font-family:Arial;background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap"><br></span></p></span><br class="gmail-Apple-interchange-newline"></div></div></div>