Google Summer of Code | Week 8

This week — July 2 to July 8— was the fourth week of the coding period of Google Summer of Code (GSoC) with Systers Open Source. If you want to know more about this you can read the introduction to my journey, my latest weekly blog posts or my weekly status report for this week.

Non-coding tasks

I asked for the “Mentorship System by Systers” to be published on Systers Open Source medium publication, after waiting for some feedback from the community.

I presented the Mentorship System Backend to the community and opened it for testing. I presented with the purpose not only to show my work to the community but to explain how to test the system. After presenting in the Community Open Session, I also announced in relevant channels of Systers Open Source slack that anyone could start testing the backend (anyone including newcomers and other contributors). I showed how someone could test the backend using Swagger UI and Postman, the constraints and test case examples.

Slides from the Backend demo presentation

Aside from the presentation I also created a Google Docs regarding Quality Assurance, to help guide contributors that want to help test testing the system. I documented test cases where the outcome is either a success or a failure. Here’s an example of a group of tests cases for accepting a mentorship request feature.

Excerpt from the Quality Assurance Google Docs with test case for accepting a request feature

This week I started looking into Material Design to develop a more high fidelity wireframe than the first one I did in the Community Bonding period. I also thought about the minimum features of the future mobile app, to get done until the end of the GSoC coding period (in 5 weeks).

Coding tasks

I submitted a PR #75 to restrict GET /users API to authenticated users. This endpoint was very useful while testing the backend during its development, but for a complete feature, this endpoint has to be restricted so that only users of this system can see other users profiles and they can only see public data (defined by the user being displayed).

The task that took me more time of the week was implementing a cron job to complete a mentorship relation. I ended up creating a cron background scheduler using apscheduler library. With the cron job I scheduled a function to run every day at 23h59. This is needed to complete mentorship relations which are passed their end date. For this, I submitted PR #79.

I also searched a lot to debug an issue we were having with the deployed server. The Authorization header wasn’t being received in the server side. I didn’t know where this issue was coming from, first I thought it was from flask-jwt-extended, then after a lot of research, I noticed that we needed to configure Apache to pass the Authorization headers to the WSGI application, our flask app. Enabling passing of authorization headers meant setting the WSGIPassAuthorization directive to On value. To solve this issue, I worked with one of my mentors, Murad, that dealt with the server deployment and helped me a lot to have the backend ready for testing.

Plans for the next week