From Fedora Project Wiki

< GSOC 2015

Revision as of 09:45, 26 March 2015 by Ethcelon (talk | contribs)

Contact Information

About Me

  • I am a third year Undergraduate computer science engineering student at GITAM University, Vizag, India.
  • I program in Python and C/C++ and little in Java. I like building web apps with Flask and writing tests. Apart from this, I am also comfortable with Javascript, CSS and HTML.
  • Testing is something I've learnt to love while contributing to Firefox-ui-tests, while I discovered Flask while writing tests and database code for centinel-server.

Questions & Answers

Why do you want to work with the Fedora Project?

I find fedora to be a good community with really helpful people. I want to be a part of this and contribute to the Fedora Project.

Do you have any past involvement with the Fedora project or any other open source project as a contributor?

I contribute to the Mozilla automation team:

Porting Firefox Ui Tests to python:

Added a feature & wrote tests:

Added a feature (using mozlog):

I wrote code and tests for centinel-server: Centinel is a tool used to detect network interference and internet censorship. Centinel-server is a flask app used to communicate with centinel nodes.

Libpynexmo: Python nexmo API

I also opensource my own code:

API server for android app: (poll for updates)

Extracting university results data for data analytics:

Did you participate with the past GSoC programs, if so which years, which organizations?

No I did not.

Will you continue contributing/ supporting the Fedora project after the GSoC 2015 program, if yes, which team(s), you are interested with?

Yes! I would am interested in working with the fedora-infra team.

Why should we choose you over other applicants?

I have experience of writing Python and developing using Flask. I have used FLask to write apps for myself as well as contributed to exiting flask projects. I have written tests for Flask apps and also worked with databases using sqlalchemy. Apart from python I am also well versed in front end of HTML, CSS and Javascript. Deployment of the shumgrepper is a major task of this project and I am confident I can do it as I have deployed flask apps with both apache & nginx before. I am a quick learner and I am sure I will learn how to write ansible configurations before the time for coding starts and finish the deployment successfully.

Will you have any other time commitments, such as school work, another job, planned vacation, etc., during the duration of the program?

My summer vacation starts from May and will go on till June end. I have 2 days of planned travel in the 3rd week of June. Apart from that I am willing to put 35-40 hours a week towards completing and deploying Shumgrepper.


My project is to finish and deploy shumgrepper.

I have written some mockup code:

Summary of idea: Finish and deploy the shumgrepper project


shumgrepper was started last year and offers an API to query the data stored by summershum. This data corresponds to the md5, sha1, sh256 and sha512 of every files in every packages in Fedora, allowing to easily find out files duplicated in multiple packages.

My idea is to Finish and deploy the shumgrepper project.

I have split my idea/process of completion into Steps:

1. Understand the codebase and learn the basics of ansible

2. Improving the existing codebase:

  • Split the views in and using flask blueprints

We currently have the views in 2 files, one is and other is . I would like to split these into two blueprints, and register the api on /api url prefix. The documentation on suggests that: Blueprints can greatly simplify how large applications work and provide a central means for Flask extensions to register operations on applications.

After doing this, we have a scalable structure for the flask application

├── shumgrepper
│   ├── api
│   │   ├──
│   │   └──
│   ├──
│   └── web
│       ├──
│       ├── static
│       ├── templates
│       │   └── hello.html
│       └──
  • Testing:

This involves writing tests for the endpoints for all the views and the methods in utils. We can write tests for this flask app using unittest. We can also choose to use Flask-testing extension.

class myTest(unittest.TestCase):

    def setUp(self): = app.test_client()

    def test_api_mock(self):
        url = '/api/packages'
        response =
        self.assertEquals(response.status, '200 OK')
        self.assertEquals(, '["package1", "package2"]')

    def test_web_mock(self):
        url = '/hello'
        response =
        self.assertEquals(response.status, '200 OK')

if __name__ == '__main__':


  • Documentation:

Write documentation for the views and utils.

3. I would like to add the following features to shumgrepper:

  • Improve the file browser at /packages
    • Have another way of viewing, like a tree: Put a [+] in front of the folder names to open and close folders.
    • Give option to order the list of files by name/date modified.
    • We can compare two different versions to see the differences. This can by done by providing visual cue using different colour such as green for unchanged and orange for changed.

4. Deployment

  • Shumgrepper is to be deployed using apache and mod_wsgi.

THis is again divided into these steps:

  • Package the dependencies for YUM, if they aren't already packaged.

note: We don't use pip to install dependencies

  • Using Ansible:
  • Ansible is used to automate IT tasks.
  • Ansible will be used to setup and manage the following:
    • Server and it's configuration files (Apache)
    • flask, fedmsg, summershum, and the other dependencies
      • Install dependencies using YUM.
      • For this we can use the package management module of ansible.
    • Run shumgrepper

In this step I shall be writing the necessary .yml config files required by ansible, white taking cues from the ansible config repository of fedora.

3 Documentation

  • Finish the documentation on how to set up the stack

Timeline (2015)

March, April & May:

  • Learn ansible and understand the current codebase.

25th May to 2nd June:

  • Refractor directory structure to support blueprints
  • Split shumgrepper into respective blueprints
  • Write documentation (continuous)

2nd June to 30th June:

  • Write tests
  • I can also use Flask.ext.testing to make this easier.
  • Add the new features
  • Finish documentation for the new features.

26th June:

  • Mid term evaluation

30th June to 10th July:

  • Write tests
  • Write ansible .yml files and setup server
  • Package python modules for installation with yum
  • Start deployment
  • Community feedback & make requested changes

26th July to August 17:

  • Finish deploying shumgrepper
  • Finish packaging for yum.
  • Community feedback & make requested changes
  • Finish documentation for setting up stack and deploying.

21st August:

Firm 'pencils down' date.