| Index: appengine/monorail/features/stars.py
|
| diff --git a/appengine/monorail/features/stars.py b/appengine/monorail/features/stars.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..83d7e1ced17b23a4f51c35c4c5f724c8c39fc876
|
| --- /dev/null
|
| +++ b/appengine/monorail/features/stars.py
|
| @@ -0,0 +1,43 @@
|
| +# Copyright 2016 The Chromium Authors. All rights reserved.
|
| +# Use of this source code is govered by a BSD-style
|
| +# license that can be found in the LICENSE file or at
|
| +# https://developers.google.com/open-source/licenses/bsd
|
| +
|
| +"""This is a starring servlet for users and projects."""
|
| +
|
| +import logging
|
| +
|
| +from framework import jsonfeed
|
| +from framework import monorailrequest
|
| +
|
| +USER_STARS_SCOPE = 'users'
|
| +PROJECT_STARS_SCOPE = 'projects'
|
| +
|
| +
|
| +class SetStarsFeed(jsonfeed.JsonFeed):
|
| + """Process an AJAX request to (un)set a star on a project or user."""
|
| +
|
| + def HandleRequest(self, mr):
|
| + """Retrieves the star persistence object and sets a star."""
|
| + starrer_id = mr.auth.user_id
|
| + item = mr.GetParam('item') # a project name or a user ID number
|
| + scope = mr.GetParam('scope')
|
| + starred = bool(mr.GetIntParam('starred'))
|
| + logging.info('Handling user set star request: %r %r %r %r',
|
| + starrer_id, item, scope, starred)
|
| +
|
| + if scope == PROJECT_STARS_SCOPE:
|
| + project = self.services.project.GetProjectByName(mr.cnxn, item)
|
| + self.services.project_star.SetStar(
|
| + mr.cnxn, project.project_id, starrer_id, starred)
|
| +
|
| + elif scope == USER_STARS_SCOPE:
|
| + user_id = int(item)
|
| + self.services.user_star.SetStar(mr.cnxn, user_id, starrer_id, starred)
|
| +
|
| + else:
|
| + raise monorailrequest.InputException('unexpected star scope: %s' % scope)
|
| +
|
| + return {
|
| + 'starred': starred,
|
| + }
|
|
|