Google Summer of Code 2017
I spent this summer doing Google Summer of Code with Zulip. This blog post summarizes the work that I did. All my work was to improve or add new features to the Zulip server. As a result I was able to work on a multitude of areas covering frontend, backened, management commands etc.

Merged Pull Requests
- Except for the first table all other tables list pull requests that are aimed at solving one problem. The first tables lists pull requests that are independent of each other.
- Note that all the pull requests listed in this section are merged. But most of them have closed label on it as Zulip merges pull requests manually.
| No | Pull Request |
|---|---|
| 1 | Show detailed message why password is weak to user. #5500 |
| 2 | Refactor email confirmation pathways to use common error handling #5891 |
| 3 | Create helper to pass and parse coma separated emails to management commands #6194 |
| 4 | List realms and show only users in the selected realm. #6087 |
| 5 | Use get_realm in management commands #6026 |
| 6 | /apps/: Detect the user OS and show the appropriate app by default. #6192 |
| 7 | Add an PM from welcome bot on user creation. #5342 |
| 8 | Move all_users option to ZulipBaseCommand #6269 |
| 10 | Analytics: Add translation bundle and tags to stats page #5755 |
| 11 | Implemented a feature to show user presence and last seen time in user popover. #4487 |
| 12 | portico: Make backend validation errors similar to frontend. #5609 |
| 13 | Use POST instead of PUT in endpoints which are not idempotent #5721 |
| 14 | User .on(‘load’) instead of .load() #5930 |
| 15 | Send message only if notifications_stream is not deactived #6249 |
| 16 | Create list_realms command #6026 |
| 17 | Move add new default stream box to top. #4745 |
| 18 | docs: Update the path of Supervisor config file. #4700 |
| 19 | requirements: Add service_identity to scrapy.txt. #5465 |
| 20 | management: Use Realm.objects.get instead of get_realm. #5729 |
| 21 | create_user: Separate password help into multiple lines. #5736 |
- One major project I was working on was to enable users to register to more than one organization in a Zulip instance. The following pull requests were made for accomplishing this.
| No | Pull Request |
|---|---|
| 1 | Add get_user function #4868 |
| 2 | Add get_user_for_mgmt function #5022 |
| 3 | Replace get_user_profile_by_email with get_user in management commands #5737 |
| 4 | Eliminate get_user_profile in remaining management commands #5761 |
| 5 | Replace get_user_profile_by_email with get_user #5783 |
| 6 | Replace get_user_profile_by_email in analytics, webhooks and avatar #5808 |
| 7 | Use get_user in zilencer, messages, and users #5852 |
| 8 | Replace get_user_profile_by_email #5867 |
- Upgraded all the python dependencies(35+) twice over the summer.
| No | Pull Request |
|---|---|
| 1 | Python dependency upgrade #6169 |
| 2 | Python dependency upgrade #5450 |
- I also worked on many pull requests that replaced hardcoded emails with helper functions.
| No | Pull Request |
|---|---|
| 1 | Add ZulipTestCase.mit_user() function #4915 |
| 2 | Add example_email, mit_email + refactorings #4948 |
| 3 | Use mit_email and example_email in test_bots.py #4977 |
| 4 | Replace mit_user().email with mit_email(). #5014 |
| 5 | Use example_email function in zerver/tests #5041 |
Unmerged Pull Requests
| No | Pull Request | Reason for not getting merged |
|---|---|---|
| 1 | Make internal send private message take recipient user profile #5904 | We decided to go with an alternative approach as in #6175 |
| 2 | Refactor to get_user in zerver/mgmt/commands/ #5324 | We decided to go with an alternative approach as in #5735 |
| 3 | Use regex validation for full_name and realm_subdomain #5441 | Decided to not replicate the form checking logic in front end |
Work Remaining
- #5656 needs some work before getting merged.