User:Abbasidaniyal/Outreachy-internship

= Proposal =

Past experience with this community
I have contributed to gdrive-to-commons as well as the WikiContrib project. I dockerized the set-up for WikiContrib. ( https://github.com/wikimedia/WikiContrib/pull/116 ). I have also been a user of many Wikimedia services. For once, I have often contributed to Wikipedia pages, for updating information etc. I have also extensively used Wikipedia and Wikimedia for several research based projects. I have extremely admired Wikimedia's contribution to the Free and Open source movement along with the democratization of knowledge / media / resources etc.

Past experience with other communities
I have been a part of several open source communities. Being a developer, I often use open source tools for various applications. I also help solve bugs, take part in discussion, review PRs etc. The few big communities where I have contributed are CCExtractor, Tensorflow, Flutter etc. I am also part of a local Python community in India along with the Linux community, and Flutter community. I have attended conferences, namely Pycon India (2019), PyData delhi (2019), and JetBrains Day (2019). Apart from these, I am an active participant in Kaggle competitions and I often contribute to the discussion forums there. I have also started several small meetups in my college itself, where seniors teach basic programming to the freshers.

Relevant Projects
List of few of my projects is as follows :-


 * Fan Sports Club : A mobile app for the senior tennis community in India. I used django for developing APIs and used Flutter to build the android/iOS app. ( https://play.google.com/store/apps/details?id=com.fansportsclub.fansportsclub )
 * Attendance Management App : A mobile app made with flutter and django which serves as an attendance management system in colleges or offices. Users can mark/track/manage their attendance directly from the app and even the administrator can monitor the attendance from the administrator app. Made for a college project. ( https://github.com/abbasidaniyal/DBMS_BACKEND )
 * Enable App  :Worked for TeamPlan of the Ministry of Housing and Urban Affairs,Government of India. A web app made with flutter for data collection about accidents, NOCs, and other municipal and civil information. This app is live for Pune Smart City and will be expanded in the future to other cities. ( https://github.com/abbasidaniyal/TeamPlan-Enable-App )
 * Trociety App : A mobile app made with flutter for management of vehicle entry/exit

in a gated society. This app was a part of Smart India Hackathon (Ministry of Human Resource and Development).

Along with these open sourced projects, I have also worked on several proprietor projects during my internship at https://www.prismberry.com/. I have also worked as a freelancer and made several small scale projects.

= Outreachy internship timeline =

Week 1-3
Work on adding additional information about the image, like license, source, date-created ,author and location (latitude, longitude). I have already worked on the backend code to accommodate these, I only have to work on the frontend and develop picker/text boxes for the specified fields.

I will also work on redesigning the tabulator table row using the RowFormatter option rather than clustering everything into one single row. This will be done in order to make a more intuitive UI for the user.

Week 4 -5
Will write unit tests and integration tests. I will also work on documenting the code as well as the setup guide for new contributors.

Week 6 - 8
Currently, any unsuccessful uploads done via the mwclient are not reported to the frontend. I will work on channelising these errors along with suitable error messages back to the user so that the user can make the required changes. I will also work on reporting selective errors for each file and inform the user which files were uploaded successfully and which were not.

Week 9 - 11
Work on the UI. Make the process similar to Special:UploadWizard. Will split the steps to upload into


 * Upload : Same as before, use google drive picker to select files.
 * Release Right : Common license etc for all files. Ask users if this is their own work or not. Based on this, subsequent options regarding licenses and declarations.
 * Describe : Modify individual attributes for each file separately.
 * Add Data : Used to add meta data like description, what the image depicts etc.
 * Use : Return the uploaded image page URL to the user along with the wikitext (template) of the image inorder to use it in a wiki page.

These are the steps followed by the Special:UploadWizard and we will mimic its behavior.

Week 12
I will write tests (unit / integration) for the newly added features. I will also document the project and document the code. I will also set up code coverage using python’s coverage package.

Week 13
I will wrap up the project by dockerizing the project. Further, I will also set up CI services like Jenkins etc in order to make the project ready for production.

= Project Progress: gdrive-to-commons=

Week 1
14th June 2020 - 20th June 2020

- Migrated code repository from Github to Gerrit

- Setup tox for the project

Week 2
21st June 2020 - 27th June 2020

- Integrated the project with the Jenkins CI service using JBB.

- Setup Mediawiki-Vagrant for local development.

Week 3
28th June 2020 - 4th July

- Added author and source input fields and integrated it with the backend

- Refactored the UI using Row Formatter from Tabulator

Week 4
5th July - 11th July

- Added Location field

- Refactored JavaScript Code

Week 5
12th July - 18th July

- Wrote unit tests

- Writing integration tests

Week 6
19th July - 25th July

- Made the upload API secure by implementing session authentication

- Minor bug fuxes

Week 7 - 8
26th July - 8th August

- Added Release Rights for staged images

- Form data validation at frontend

Week 9 - 10
9th August - 22nd August

- Added Categories field for staged images

- Used select2 to build query based multiple category selector

Week 11
23rd August - 29th August

- Report errors from the Wikimedia API back to the user

- Display separate table for successful and unsuccessful uploads

Week 12
30th August - 5th September

- Major code refactor. Removed most of the JavaScript code from the upload.html to a separate upload.js file

- Used Django's template tag "json_script" to initialize the valiables in js code via the backend.

Week 13
6th September - 16th September

- Added an option to add more images to the staging area before submitting

- Updated the documentation and project setup guide.