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.