Merge branch 'main' into avm99963-monorail
Merged commit 34d8229ae2b51fb1a15bd208e6fe6185c94f6266
GitOrigin-RevId: 7ee0917f93a577e475f8e09526dd144d245593f4
diff --git a/mrproto/user_pb2.py b/mrproto/user_pb2.py
new file mode 100644
index 0000000..de1aa6e
--- /dev/null
+++ b/mrproto/user_pb2.py
@@ -0,0 +1,96 @@
+# Copyright 2016 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Protocol buffers for Monorail users."""
+
+from __future__ import print_function
+from __future__ import division
+from __future__ import absolute_import
+
+from protorpc import messages
+
+
+class IssueUpdateNav(messages.Enum):
+ """Pref for where a project member goes after an issue update."""
+ UP_TO_LIST = 0 # Back to issue list or grid view.
+ STAY_SAME_ISSUE = 1 # Show the same issue with the update.
+ NEXT_IN_LIST = 2 # Triage mode: go to next issue, if any.
+
+
+class User(messages.Message):
+ """In-memory busines object for representing users."""
+ user_id = messages.IntegerField(1) # TODO(jrobbins): make it required.
+
+ # Is this user a site administer?
+ is_site_admin = messages.BooleanField(4, required=True, default=False)
+
+ # User notification preferences. These preferences describe when
+ # a user is sent a email notification after an issue has changed.
+ # The user is notified if either of the following is true:
+ # 1. notify_issue_change is True and the user is named in the
+ # issue's Owner or CC field.
+ # 2. notify_starred_issue_change is True and the user has starred
+ # the issue.
+ notify_issue_change = messages.BooleanField(5, default=True)
+ notify_starred_issue_change = messages.BooleanField(6, default=True)
+ # Opt-in to email subject lines like "proj:123: issue summary".
+ email_compact_subject = messages.BooleanField(14, default=False)
+ # Opt-out of "View Issue" button in Gmail inbox.
+ email_view_widget = messages.BooleanField(15, default=True)
+ # Opt-in to ping emails from issues that the user starred.
+ notify_starred_ping = messages.BooleanField(16, default=False)
+
+ # This user has been banned, and this string describes why. All access
+ # to Monorail pages should be disabled.
+ banned = messages.StringField(7, default='')
+
+ # Fields 8-13 are no longer used: they were User action counts and limits.
+
+ after_issue_update = messages.EnumField(
+ IssueUpdateNav, 29, default=IssueUpdateNav.STAY_SAME_ISSUE)
+
+ # Should we obfuscate the user's email address and require solving a captcha
+ # to reveal it entirely? The default value corresponds to requiring users to
+ # opt into publishing their identities, but our code ensures that the
+ # opposite takes place for Gmail accounts.
+ obscure_email = messages.BooleanField(26, default=True)
+
+ # The email address chosen by the user to reveal on the site.
+ email = messages.StringField(27)
+
+ # Sticky state for show/hide widget on people details page.
+ keep_people_perms_open = messages.BooleanField(33, default=False)
+
+ deleted = messages.BooleanField(39, default=False)
+ deleted_timestamp = messages.IntegerField(40, default=0)
+
+ preview_on_hover = messages.BooleanField(42, default=True)
+
+ last_visit_timestamp = messages.IntegerField(45, default=0)
+ email_bounce_timestamp = messages.IntegerField(46, default=0)
+ vacation_message = messages.StringField(47)
+
+ linked_parent_id = messages.IntegerField(48)
+ linked_child_ids = messages.IntegerField(49, repeated=True)
+
+
+class UserPrefValue(messages.Message):
+ """Holds a single non-default user pref."""
+ name = messages.StringField(1, required=True)
+ value = messages.StringField(2)
+
+
+class UserPrefs(messages.Message):
+ """In-memory business object for representing user preferences."""
+ user_id = messages.IntegerField(1, required=True)
+ prefs = messages.MessageField(UserPrefValue, 2, repeated=True)
+
+
+
+def MakeUser(user_id, email=None, obscure_email=False):
+ """Create and return a new user record in RAM."""
+ user = User(user_id=user_id, obscure_email=bool(obscure_email))
+ if email:
+ user.email = email
+ return user