コード例 #1
0
ファイル: user_svc_test.py プロジェクト: xinghun61/infra
    def testGetUsersPrefs(self):
        self.user_service.userprefs_tbl = mock.Mock()
        self.user_service.userprefs_tbl.Select.return_value = [
            (111, 'code_font', 'true'),
            (111, 'keep_perms_open', 'true'),
            # Note: user 222 has not set any prefs.
            (333, 'code_font', 'false')
        ]

        prefs_dict = self.user_service.GetUsersPrefs(self.cnxn,
                                                     [111, 222, 333])

        expected = {
            111:
            user_pb2.UserPrefs(user_id=111,
                               prefs=[
                                   user_pb2.UserPrefValue(name='code_font',
                                                          value='true'),
                                   user_pb2.UserPrefValue(
                                       name='keep_perms_open', value='true')
                               ]),
            222:
            user_pb2.UserPrefs(user_id=222),
            333:
            user_pb2.UserPrefs(user_id=333,
                               prefs=[
                                   user_pb2.UserPrefValue(name='code_font',
                                                          value='false')
                               ]),
        }
        self.assertEqual(expected, prefs_dict)
コード例 #2
0
    def testComputeGroupReasonList_NotifyAll(self):
        """Project is configured to always notify [email protected]."""
        self.project.issue_notify_address = '*****@*****.**'
        actual = notify_reasons.ComputeGroupReasonList('cnxn', self.services,
                                                       self.project,
                                                       self.issue, self.config,
                                                       self.users_by_id, [],
                                                       True)
        self.CheckGroupReasonList(
            actual,
            owner_apl=[
                notify_reasons.AddrPerm(
                    False, self.fred.email, self.fred, REPLY_NOT_ALLOWED,
                    user_pb2.UserPrefs(user_id=self.fred.user_id))
            ],
            all_notifications_apl=[
                notify_reasons.AddrPerm(False, '*****@*****.**',
                                        None, REPLY_NOT_ALLOWED,
                                        user_pb2.UserPrefs())
            ])

        # We don't use the notify-all address when the issue is not public.
        actual = notify_reasons.ComputeGroupReasonList('cnxn', self.services,
                                                       self.project,
                                                       self.issue, self.config,
                                                       self.users_by_id, [],
                                                       False)
        self.CheckGroupReasonList(
            actual,
            owner_apl=[
                notify_reasons.AddrPerm(
                    False, self.fred.email, self.fred, REPLY_NOT_ALLOWED,
                    user_pb2.UserPrefs(user_id=self.fred.user_id))
            ])

        # Now with the notify-all address disabled.
        actual = notify_reasons.ComputeGroupReasonList(
            'cnxn',
            self.services,
            self.project,
            self.issue,
            self.config,
            self.users_by_id, [],
            True,
            include_notify_all=False)
        self.CheckGroupReasonList(
            actual,
            owner_apl=[
                notify_reasons.AddrPerm(
                    False, self.fred.email, self.fred, REPLY_NOT_ALLOWED,
                    user_pb2.UserPrefs(user_id=self.fred.user_id))
            ])
コード例 #3
0
    def testNotifyAddress(self):
        # No mailing list or filter rules are defined
        addr_perm_list = notify_reasons.ComputeProjectNotificationAddrList(
            self.cnxn, self.services, self.project, True, set())
        self.assertListEqual([], addr_perm_list)

        # Only mailing list is notified.
        self.project.issue_notify_address = '*****@*****.**'
        addr_perm_list = notify_reasons.ComputeProjectNotificationAddrList(
            self.cnxn, self.services, self.project, True, set())
        self.assertListEqual([
            notify_reasons.AddrPerm(False, '*****@*****.**', None,
                                    REPLY_NOT_ALLOWED, user_pb2.UserPrefs())
        ], addr_perm_list)

        # No one is notified because mailing list was already notified.
        omit_addrs = {'*****@*****.**'}
        addr_perm_list = notify_reasons.ComputeProjectNotificationAddrList(
            self.cnxn, self.services, self.project, False, omit_addrs)
        self.assertListEqual([], addr_perm_list)

        # No one is notified because anon users cannot view.
        addr_perm_list = notify_reasons.ComputeProjectNotificationAddrList(
            self.cnxn, self.services, self.project, False, set())
        self.assertListEqual([], addr_perm_list)
コード例 #4
0
    def testHtmlBody_WithEscapedHtml(self):
        """"An html body is sent with html content escaped."""
        body_with_html_content = (
            '<a href="http://www.google.com">test</a> \'something\'')
        email_task = notify_helpers._MakeEmailWorkItem(
            notify_reasons.AddrPerm(False, '*****@*****.**',
                                    self.member, REPLY_NOT_ALLOWED,
                                    user_pb2.UserPrefs()), ['reason'],
            self.issue, 'body link-only', body_with_html_content,
            'unused body mem', self.project, 'example.com',
            self.commenter_view, self.detail_url)

        escaped_body_with_html_content = (
            '&lt;a href=&quot;http://www.google.com&quot;&gt;test&lt;/a&gt; '
            '&#39;something&#39;')
        notify_helpers._MakeNotificationFooter(['reason'], REPLY_NOT_ALLOWED,
                                               'example.com')
        expected_html_body = (
            notify_helpers.HTML_BODY_WITH_GMAIL_ACTION_TEMPLATE % {
                'url':
                self.detail_url,
                'body':
                '%s-- <br/>%s' %
                (escaped_body_with_html_content, self.expected_html_footer)
            })
        self.assertEquals(expected_html_body, email_task['html_body'])
コード例 #5
0
    def testGatherUnifiedSettingsPageData(self):
        mr = self.mr
        mr.auth.user_view = framework_views.StuffUserView(
            100, 'user@invalid', True)
        mr.auth.user_view.profile_url = '/u/profile/url'
        userprefs = user_pb2.UserPrefs(prefs=[
            user_pb2.UserPrefValue(name='public_issue_notice', value='true')
        ])
        page_data = framework_helpers.UserSettings.GatherUnifiedSettingsPageData(
            mr.auth.user_id, mr.auth.user_view, mr.auth.user_pb, userprefs)

        expected_keys = [
            'settings_user',
            'settings_user_pb',
            'settings_user_is_banned',
            'self',
            'profile_url_fragment',
            'preview_on_hover',
            'settings_user_prefs',
        ]
        self.assertItemsEqual(expected_keys, list(page_data.keys()))

        self.assertEqual('profile/url', page_data['profile_url_fragment'])
        self.assertTrue(page_data['settings_user_prefs'].public_issue_notice)
        self.assertFalse(page_data['settings_user_prefs'].restrict_new_issues)
コード例 #6
0
ファイル: user_svc.py プロジェクト: xinghun61/infra
 def GetUserPrefsByEmail(self, cnxn, email, use_cache=True):
     """Return a UserPrefs PB for the requested email, or an empty UserPrefs."""
     try:
         user_id = self.LookupUserID(cnxn, email)
         user_prefs = self.GetUserPrefs(cnxn, user_id, use_cache=use_cache)
     except exceptions.NoSuchUserException:
         user_prefs = user_pb2.UserPrefs()
     return user_prefs
コード例 #7
0
    def testComputeGroupReasonList_Subscribers(self):
        """Bob subscribed."""
        sq = tracker_bizobj.MakeSavedQuery(1,
                                           'freds issues',
                                           1,
                                           'owner:[email protected]',
                                           subscription_mode='immediate',
                                           executes_in_project_ids=[789])
        self.services.features.UpdateUserSavedQueries('cnxn', self.bob.user_id,
                                                      [sq])
        actual = notify_reasons.ComputeGroupReasonList('cnxn', self.services,
                                                       self.project,
                                                       self.issue, self.config,
                                                       self.users_by_id, [],
                                                       True)
        self.CheckGroupReasonList(
            actual,
            owner_apl=[
                notify_reasons.AddrPerm(
                    False, self.fred.email, self.fred, REPLY_NOT_ALLOWED,
                    user_pb2.UserPrefs(user_id=self.fred.user_id))
            ],
            subscriber_apl=[
                notify_reasons.AddrPerm(
                    False, self.bob.email, self.bob, REPLY_NOT_ALLOWED,
                    user_pb2.UserPrefs(user_id=self.bob.user_id))
            ])

        # Now with subscriber notifications disabled.
        actual = notify_reasons.ComputeGroupReasonList(
            'cnxn',
            self.services,
            self.project,
            self.issue,
            self.config,
            self.users_by_id, [],
            True,
            include_subscribers=False)
        self.CheckGroupReasonList(
            actual,
            owner_apl=[
                notify_reasons.AddrPerm(
                    False, self.fred.email, self.fred, REPLY_NOT_ALLOWED,
                    user_pb2.UserPrefs(user_id=self.fred.user_id))
            ])
コード例 #8
0
 def testBodySelection_Member(self):
     """We send members the email body that is indented for members."""
     email_task = notify_helpers._MakeEmailWorkItem(
         notify_reasons.AddrPerm(True, '*****@*****.**',
                                 self.member, REPLY_NOT_ALLOWED,
                                 user_pb2.UserPrefs()), ['reason'],
         self.issue, 'body link-only', 'body mem', 'body mem', self.project,
         'example.com', self.commenter_view, self.detail_url)
     self.assertIn('body mem', email_task['body'])
コード例 #9
0
  def testGetUserPrefs(self):
    self.user_service.userprefs_tbl = mock.Mock()
    self.user_service.userprefs_tbl.Select.return_value = [
        (111, 'code_font', 'true'),
        (111, 'keep_perms_open', 'true'),
        # Note: user 222 has not set any prefs.
        (333, 'code_font', 'false')]

    userprefs = self.user_service.GetUserPrefs(self.cnxn, 111)
    expected = user_pb2.UserPrefs(
        user_id=111,
        prefs=[user_pb2.UserPrefValue(name='code_font', value='true'),
               user_pb2.UserPrefValue(name='keep_perms_open', value='true')])
    self.assertEqual(expected, userprefs)

    userprefs = self.user_service.GetUserPrefs(self.cnxn, 222)
    expected = user_pb2.UserPrefs(user_id=222)
    self.assertEqual(expected, userprefs)
コード例 #10
0
ファイル: user_svc.py プロジェクト: xinghun61/infra
 def GetUsersPrefs(self, cnxn, user_ids, use_cache=True):
     """Return {user_id: userprefs} for the requested user IDs."""
     prefs_dict, misses = self.userprefs_2lc.GetAll(cnxn,
                                                    user_ids,
                                                    use_cache=use_cache)
     # Make sure that every user is represented in the result.
     for user_id in misses:
         prefs_dict[user_id] = user_pb2.UserPrefs(user_id=user_id)
     return prefs_dict
コード例 #11
0
 def testBodySelection_LinkOnly(self, mock_sulo):
     """We send a link-only body when ShouldUseLinkOnly() is true."""
     mock_sulo.return_value = True
     email_task = notify_helpers._MakeEmailWorkItem(
         notify_reasons.AddrPerm(True, '*****@*****.**',
                                 self.member, REPLY_NOT_ALLOWED,
                                 user_pb2.UserPrefs()), ['reason'],
         self.issue, 'body link-only', 'body mem', 'body mem', self.project,
         'example.com', self.commenter_view, self.detail_url)
     self.assertIn('body link-only', email_task['body'])
コード例 #12
0
 def testInboundEmailDisabled(self):
     """We don't invite replies if they are disabled for this project."""
     self.project.process_inbound_email = False
     email_task = notify_helpers._MakeEmailWorkItem(
         notify_reasons.AddrPerm(True, '*****@*****.**',
                                 self.member, REPLY_MAY_UPDATE,
                                 user_pb2.UserPrefs()), ['reason'],
         self.issue, 'body link-only', 'body non', 'body mem', self.project,
         'example.com', self.commenter_view, self.detail_url)
     self.assertEqual(emailfmt.NoReplyAddress(), email_task['reply_to'])
コード例 #13
0
 def testComputeGroupReasonList_OwnerAndCC(self):
     """Fred owns the issue, Alice is CC'd."""
     self.issue.cc_ids = [self.alice.user_id]
     actual = notify_reasons.ComputeGroupReasonList('cnxn', self.services,
                                                    self.project,
                                                    self.issue, self.config,
                                                    self.users_by_id, [],
                                                    True)
     self.CheckGroupReasonList(
         actual,
         owner_apl=[
             notify_reasons.AddrPerm(
                 False, self.fred.email, self.fred, REPLY_NOT_ALLOWED,
                 user_pb2.UserPrefs(user_id=self.fred.user_id))
         ],
         ccd_apl=[
             notify_reasons.AddrPerm(
                 False, self.alice.email, self.alice, REPLY_NOT_ALLOWED,
                 user_pb2.UserPrefs(user_id=self.alice.user_id))
         ])
コード例 #14
0
    def testReasons(self):
        """The footer lists reasons why that email was sent to that user."""
        email_task = notify_helpers._MakeEmailWorkItem(
            notify_reasons.AddrPerm(True, '*****@*****.**', self.member,
                                    REPLY_MAY_UPDATE, user_pb2.UserPrefs()),
            ['Funny', 'Caring', 'Near'], self.issue, 'body link-only',
            'body non', 'body mem', self.project, 'example.com',
            self.commenter_view, self.detail_url)
        self.assertIn('because:', email_task['body'])
        self.assertIn('1. Funny', email_task['body'])
        self.assertIn('2. Caring', email_task['body'])
        self.assertIn('3. Near', email_task['body'])

        email_task = notify_helpers._MakeEmailWorkItem(
            notify_reasons.AddrPerm(True, '*****@*****.**',
                                    self.member, REPLY_MAY_UPDATE,
                                    user_pb2.UserPrefs()), [], self.issue,
            'body link-only', 'body non', 'body mem', self.project,
            'example.com', self.commenter_view, self.detail_url)
        self.assertNotIn('because', email_task['body'])
コード例 #15
0
 def testRecipientIsMember(self):
     cnxn = 'fake cnxn'
     ids_to_consider = [111, 222, 999]
     addr_perm_list = notify_reasons.ComputeIssueChangeAddressPermList(
         cnxn,
         ids_to_consider,
         self.project,
         self.issue,
         self.services,
         set(),
         self.users_by_id,
         pref_check_function=lambda *args: True)
     self.assertEqual([
         notify_reasons.AddrPerm(True, '*****@*****.**', self.owner,
                                 REPLY_MAY_UPDATE,
                                 user_pb2.UserPrefs(user_id=111)),
         notify_reasons.AddrPerm(True, '*****@*****.**', self.member,
                                 REPLY_MAY_UPDATE,
                                 user_pb2.UserPrefs(user_id=222)),
         notify_reasons.AddrPerm(False, '*****@*****.**', self.visitor,
                                 REPLY_MAY_COMMENT,
                                 user_pb2.UserPrefs(user_id=999))
     ], addr_perm_list)
コード例 #16
0
 def testComputeGroupReasonList_Starrers(self):
     """Bob and Alice starred it, but Alice opts out of notifications."""
     self.alice.notify_starred_issue_change = False
     actual = notify_reasons.ComputeGroupReasonList(
         'cnxn',
         self.services,
         self.project,
         self.issue,
         self.config,
         self.users_by_id, [],
         True,
         starrer_ids=[self.alice.user_id, self.bob.user_id])
     self.CheckGroupReasonList(
         actual,
         owner_apl=[
             notify_reasons.AddrPerm(
                 False, self.fred.email, self.fred, REPLY_NOT_ALLOWED,
                 user_pb2.UserPrefs(user_id=self.fred.user_id))
         ],
         starrer_apl=[
             notify_reasons.AddrPerm(
                 False, self.bob.email, self.bob, REPLY_NOT_ALLOWED,
                 user_pb2.UserPrefs(user_id=self.bob.user_id))
         ])
コード例 #17
0
    def testHtmlBody(self):
        """"An html body is sent if a detail_url is specified."""
        email_task = notify_helpers._MakeEmailWorkItem(
            notify_reasons.AddrPerm(False, '*****@*****.**',
                                    self.member, REPLY_NOT_ALLOWED,
                                    user_pb2.UserPrefs()), ['reason'],
            self.issue, 'body link-only', 'body non', 'body mem', self.project,
            'example.com', self.commenter_view, self.detail_url)

        expected_html_body = (
            notify_helpers.HTML_BODY_WITH_GMAIL_ACTION_TEMPLATE % {
                'url': self.detail_url,
                'body': 'body non-- <br/>%s' % self.expected_html_footer
            })
        self.assertEquals(expected_html_body, email_task['html_body'])
コード例 #18
0
 def setUp(self):
     parent = user_pb2.User(user_id=111,
                            email='*****@*****.**',
                            linked_child_ids=[222])
     child = user_pb2.User(user_id=222,
                           email='*****@*****.**',
                           linked_parent_id=111)
     user_3 = user_pb2.User(user_id=333, email='*****@*****.**')
     user_4 = user_pb2.User(user_id=444, email='*****@*****.**')
     self.addr_perm_parent = notify_reasons.AddrPerm(
         False, parent.email, parent, notify_reasons.REPLY_NOT_ALLOWED,
         user_pb2.UserPrefs())
     self.addr_perm_child = notify_reasons.AddrPerm(
         False, child.email, child, notify_reasons.REPLY_NOT_ALLOWED,
         user_pb2.UserPrefs())
     self.addr_perm_3 = notify_reasons.AddrPerm(
         False, user_3.email, user_3, notify_reasons.REPLY_NOT_ALLOWED,
         user_pb2.UserPrefs())
     self.addr_perm_4 = notify_reasons.AddrPerm(
         False, user_4.email, user_4, notify_reasons.REPLY_NOT_ALLOWED,
         user_pb2.UserPrefs())
     self.addr_perm_5 = notify_reasons.AddrPerm(
         False, '*****@*****.**', None, notify_reasons.REPLY_NOT_ALLOWED,
         user_pb2.UserPrefs())
コード例 #19
0
    def testReplyInvitation(self):
        """We include a footer about replying that is appropriate for that user."""
        email_task = notify_helpers._MakeEmailWorkItem(
            notify_reasons.AddrPerm(True, '*****@*****.**',
                                    self.member, REPLY_NOT_ALLOWED,
                                    user_pb2.UserPrefs()), ['reason'],
            self.issue, 'body link-only', 'body non', 'body mem', self.project,
            'example.com', self.commenter_view, self.detail_url)
        self.assertEqual(emailfmt.NoReplyAddress(), email_task['reply_to'])
        self.assertNotIn('Reply to this email', email_task['body'])

        email_task = notify_helpers._MakeEmailWorkItem(
            notify_reasons.AddrPerm(True, '*****@*****.**',
                                    self.member, REPLY_MAY_COMMENT,
                                    user_pb2.UserPrefs()), ['reason'],
            self.issue, 'body link-only', 'body non', 'body mem', self.project,
            'example.com', self.commenter_view, self.detail_url)
        self.assertEqual(
            '%s@%s' % (self.project.project_name, emailfmt.MailDomain()),
            email_task['reply_to'])
        self.assertIn('Reply to this email to add a comment',
                      email_task['body'])
        self.assertNotIn('make changes', email_task['body'])

        email_task = notify_helpers._MakeEmailWorkItem(
            notify_reasons.AddrPerm(True, '*****@*****.**',
                                    self.member, REPLY_MAY_UPDATE,
                                    user_pb2.UserPrefs()), ['reason'],
            self.issue, 'body link-only', 'body non', 'body mem', self.project,
            'example.com', self.commenter_view, self.detail_url)
        self.assertEqual(
            '%s@%s' % (self.project.project_name, emailfmt.MailDomain()),
            email_task['reply_to'])
        self.assertIn('Reply to this email to add a comment',
                      email_task['body'])
        self.assertIn('make updates', email_task['body'])
コード例 #20
0
    def testFilterRuleNotifyAddresses(self):
        issue = fake.MakeTestIssue(self.project.project_id, 1, 'summary',
                                   'New', 555)
        issue.derived_notify_addrs.extend(['*****@*****.**'])

        addr_perm_list = notify_reasons.ComputeIssueNotificationAddrList(
            self.cnxn, self.services, issue, set())
        self.assertListEqual([
            notify_reasons.AddrPerm(False, '*****@*****.**', None,
                                    REPLY_NOT_ALLOWED, user_pb2.UserPrefs())
        ], addr_perm_list)

        # Also-notify addresses can be omitted (e.g., if it is the same as
        # the email address of the user who made the change).
        addr_perm_list = notify_reasons.ComputeIssueNotificationAddrList(
            self.cnxn, self.services, issue, {'*****@*****.**'})
        self.assertListEqual([], addr_perm_list)
コード例 #21
0
    def testBodySelection_NonMember(self):
        """We send non-members the email body that is indented for non-members."""
        email_task = notify_helpers._MakeEmailWorkItem(
            notify_reasons.AddrPerm(False, '*****@*****.**',
                                    self.member, REPLY_NOT_ALLOWED,
                                    user_pb2.UserPrefs()), ['reason'],
            self.issue, 'body link-only', 'body non', 'body mem', self.project,
            'example.com', self.commenter_view, self.detail_url)

        self.assertEqual('*****@*****.**', email_task['to'])
        self.assertEqual('Issue 1234 in proj1: summary', email_task['subject'])
        self.assertIn('body non', email_task['body'])
        self.assertEqual(
            emailfmt.FormatFromAddr(self.project,
                                    commenter_view=self.commenter_view,
                                    can_reply_to=False),
            email_task['from_addr'])
        self.assertEqual(emailfmt.NoReplyAddress(), email_task['reply_to'])
コード例 #22
0
    def testHtmlBody_WithUnicodeChars(self):
        """"An html body is sent if a detail_url is specified."""
        unicode_content = '\xe2\x9d\xa4     â    â'
        email_task = notify_helpers._MakeEmailWorkItem(
            notify_reasons.AddrPerm(False, '*****@*****.**',
                                    self.member, REPLY_NOT_ALLOWED,
                                    user_pb2.UserPrefs()), ['reason'],
            self.issue, 'body link-only', unicode_content, 'unused body mem',
            self.project, 'example.com', self.commenter_view, self.detail_url)

        expected_html_body = (
            notify_helpers.HTML_BODY_WITH_GMAIL_ACTION_TEMPLATE % {
                'url':
                self.detail_url,
                'body':
                '%s-- <br/>%s' %
                (unicode_content.decode('utf-8'), self.expected_html_footer)
            })
        self.assertEquals(expected_html_body, email_task['html_body'])
コード例 #23
0
    def testHtmlBody_LinkWithinTags(self):
        """"An html body is sent with correct <a href>s."""
        email_task = notify_helpers._MakeEmailWorkItem(
            notify_reasons.AddrPerm(False, '*****@*****.**',
                                    self.member, REPLY_NOT_ALLOWED,
                                    user_pb2.UserPrefs()), ['reason'],
            self.issue, 'body link-only', 'a <http://google.com> z',
            'unused body', self.project, 'example.com', self.commenter_view,
            self.detail_url)

        expected_html_body = (
            notify_helpers.HTML_BODY_WITH_GMAIL_ACTION_TEMPLATE % {
                'url':
                self.detail_url,
                'body':
                ('a &lt;<a href="http://google.com">http://google.com</a>&gt; '
                 'z-- <br/>%s' % self.expected_html_footer)
            })
        self.assertEquals(expected_html_body, email_task['html_body'])
コード例 #24
0
 def setUp(self):
     self.user_prefs = user_pb2.UserPrefs()
     self.user = user_pb2.User()
     self.issue = fake.MakeTestIssue(789, 1, 'summary one', 'New', 111)
     self.rvg_issue = fake.MakeTestIssue(789,
                                         2,
                                         'summary two',
                                         'New',
                                         111,
                                         labels=['Restrict-View-Google'])
     self.more_restricted_issue = fake.MakeTestIssue(
         789, 3, 'summary three', 'New', 111, labels=['Restrict-View-Core'])
     self.both_restricted_issue = fake.MakeTestIssue(
         789,
         4,
         'summary four',
         'New',
         111,
         labels=['Restrict-View-Google', 'Restrict-View-Core'])
     self.addr_perm = notify_reasons.AddrPerm(
         False, '*****@*****.**', self.user,
         notify_reasons.REPLY_MAY_COMMENT, self.user_prefs)
コード例 #25
0
ファイル: user_svc.py プロジェクト: xinghun61/infra
    def _DeserializeUserPrefsByID(self, userprefs_rows):
        """Convert database row tuples into UserPrefs PBs.

    Args:
      userprefs_rows: rows from the UserPrefs DB table.

    Returns:
      A dict {user_id: userprefs} for all the users in userprefs_rows.
    """
        result_dict = {}

        # Make one UserPrefs PB for each row in userprefs_rows.
        for row in userprefs_rows:
            (user_id, name, value) = row
            if user_id not in result_dict:
                userprefs = user_pb2.UserPrefs(user_id=user_id)
                result_dict[user_id] = userprefs
            else:
                userprefs = result_dict[user_id]
            userprefs.prefs.append(
                user_pb2.UserPrefValue(name=name, value=value))

        return result_dict