From Fedora Project Wiki
Line 17: Line 17:
 
* 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.
 
* 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===
+
==Questions & Answers==
'''Why do you want to work with the Fedora Project?'''
+
===Why do you want to work with the Fedora Project?===
 +
 
 
I find fedora to be a good community with really helpful people.
 
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.
 
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?'''
+
===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:
 
I contribute to the Mozilla automation team:
  
 +
Porting Firefox Ui Tests to python:
 
https://github.com/mozilla/firefox-ui-tests/
 
https://github.com/mozilla/firefox-ui-tests/
  
 +
Added a feature & wrote tests:
 
https://github.com/mozilla/mozdownload
 
https://github.com/mozilla/mozdownload
  
 +
Added a feature (using mozlog):
 
https://github.com/mozilla/mozmill-automation
 
https://github.com/mozilla/mozmill-automation
  
I wrote some code for centinel-server:
+
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.
  
 
https://github.com/iclab/centinel-server
 
https://github.com/iclab/centinel-server
  
This was the project that really got me into contributions.
+
Libpynexmo:
 +
Python nexmo API
  
Libpynexmo
 
 
https://github.com/marcuz/libpynexmo
 
https://github.com/marcuz/libpynexmo
  
 
I also opensource my own code:
 
I also opensource my own code:
  
 +
API server for android app: (poll for updates)
 
https://github.com/Ethcelon/carnival
 
https://github.com/Ethcelon/carnival
  
 +
Extracting university results data for data analytics:
 
https://github.com/Ethcelon/gitam-results-scraping
 
https://github.com/Ethcelon/gitam-results-scraping
  
'''Did you participate with the past GSoC programs, if so which years, which organizations?'''
+
 
 +
===Did you participate with the past GSoC programs, if so which years, which organizations?===
 +
 
 
No I did not.
 
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?'''
+
===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.
 
Yes! I would am interested in working with the fedora-infra team.
  
'''Why should we choose you over other applicants?'''
+
===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.
 
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.
Line 59: Line 70:
  
 
'''Will you have any other time commitments, such as school work, another job, planned vacation, etc., during the duration of the program?'''
 
'''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 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.
 +
 +
==Proposal==
 +
 +
My project is to finish and deploy shumgrepper.
 +
 +
I have written some mockup code: https://github.com/Ethcelon/gsocprototype
 +
 +
'''Summary of idea: Finish and deploy the shumgrepper project'''
 +
 +
===OUTLINE===
 +
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 api.py and init.py using flask blueprints
 +
       
 +
We currently have the views in 2 files, one is api.py and other is __init__.py . I would like to split these into two blueprints, and register the api on /api url prefix.
 +
The documentation on flask.pocoo.org 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
 +
<pre>
 +
.
 +
├── shumgrepper
 +
│   ├── api
 +
│   │   ├── __init__.py
 +
│   │   └── views.py
 +
│   ├── __init__.py
 +
│   └── web
 +
│      ├── __init__.py
 +
│      ├── static
 +
│      ├── templates
 +
│      │   └── hello.html
 +
│      └── views.py
 +
├── README.md
 +
├── run.py
 +
└── tests.py
 +
</pre>
 +
* 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.
 +
<pre>
 +
class myTest(unittest.TestCase):
 +
 +
    def setUp(self):
 +
        self.app = app.test_client()
 +
 +
    def test_api_mock(self):
 +
        url = '/api/packages'
 +
        response = self.app.get(url)
 +
        self.assertEquals(response.status, '200 OK')
 +
        self.assertEquals(response.data, '["package1", "package2"]')
 +
 +
    def test_web_mock(self):
 +
        url = '/hello'
 +
        response = self.app.get(url)
 +
        self.assertEquals(response.status, '200 OK')
 +
 +
if __name__ == '__main__':
 +
    unittest.main()
 +
</pre>
 +
Mockup: https://github.com/Ethcelon/gsocprototype
 +
 +
* 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.
 +
  
 
[[Category:Summer_coding_2015]]
 
[[Category:Summer_coding_2015]]

Revision as of 09:30, 26 March 2015

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 very less of 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: https://github.com/mozilla/firefox-ui-tests/

Added a feature & wrote tests: https://github.com/mozilla/mozdownload

Added a feature (using mozlog): https://github.com/mozilla/mozmill-automation

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.

https://github.com/iclab/centinel-server

Libpynexmo: Python nexmo API

https://github.com/marcuz/libpynexmo

I also opensource my own code:

API server for android app: (poll for updates) https://github.com/Ethcelon/carnival

Extracting university results data for data analytics: https://github.com/Ethcelon/gitam-results-scraping


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.

Proposal

My project is to finish and deploy shumgrepper.

I have written some mockup code: https://github.com/Ethcelon/gsocprototype

Summary of idea: Finish and deploy the shumgrepper project

OUTLINE

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 api.py and init.py using flask blueprints

We currently have the views in 2 files, one is api.py and other is __init__.py . I would like to split these into two blueprints, and register the api on /api url prefix. The documentation on flask.pocoo.org 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
│   │   ├── __init__.py
│   │   └── views.py
│   ├── __init__.py
│   └── web
│       ├── __init__.py
│       ├── static
│       ├── templates
│       │   └── hello.html
│       └── views.py
├── README.md
├── run.py
└── tests.py
  • 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):
        self.app = app.test_client()

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

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

if __name__ == '__main__':
    unittest.main()

Mockup: https://github.com/Ethcelon/gsocprototype

  • 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.