initial work on adding models for starring repos.
I'm sick of using `git stash`.
This commit is contained in:
parent
f3259c862b
commit
eb956e5b7d
5 changed files with 197 additions and 16 deletions
|
@ -9,10 +9,12 @@ from app import app, billing as stripe, authentication, avatar
|
|||
from endpoints.api import (ApiResource, nickname, resource, validate_json_request, request_error,
|
||||
log_action, internal_only, NotFound, require_user_admin, parse_args,
|
||||
query_param, InvalidToken, require_scope, format_date, hide_if, show_if,
|
||||
license_error, require_fresh_login, path_param, define_json_response)
|
||||
license_error, require_fresh_login, path_param, define_json_response,
|
||||
RepositoryParamResource)
|
||||
from endpoints.api.subscribe import subscribe
|
||||
from endpoints.common import common_login
|
||||
from endpoints.api.team import try_accept_invite
|
||||
from endpoints.api.repository import repo_view
|
||||
|
||||
from data import model
|
||||
from data.billing import get_plan
|
||||
|
@ -247,7 +249,6 @@ class User(ApiResource):
|
|||
raise request_error(message='Username is already in use')
|
||||
|
||||
model.change_username(user, new_username)
|
||||
|
||||
except model.InvalidPasswordException, ex:
|
||||
raise request_error(exception=ex)
|
||||
|
||||
|
@ -663,3 +664,75 @@ class UserAuthorization(ApiResource):
|
|||
|
||||
access_token.delete_instance(recursive=True, delete_nullable=True)
|
||||
return 'Deleted', 204
|
||||
|
||||
@resource('/v1/user/starred')
|
||||
class StarredRepositoryList(ApiResource):
|
||||
""" Operations for creating and listing starred repositories. """
|
||||
schemas = {
|
||||
'NewStarredRepository': {
|
||||
'id': 'NewStarredRepository',
|
||||
'type': 'object',
|
||||
'required': [
|
||||
'namespace',
|
||||
'repository',
|
||||
],
|
||||
'properties': {
|
||||
'namespace': {
|
||||
'type': 'string',
|
||||
'description': 'Namespace in which the repository belongs',
|
||||
},
|
||||
'repository': {
|
||||
'type': 'string',
|
||||
'description': 'Repository name'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@require_scope(scopes.READ_REPO)
|
||||
@nickname('listStarredRepos')
|
||||
@parse_args
|
||||
@query_param('page', 'Offset page number. (int)', type=int)
|
||||
@query_param('limit', 'Limit on the number of results (int)', type=int)
|
||||
def get(self):
|
||||
""" List all starred repositories. """
|
||||
page = args['page']
|
||||
limit = args['limit']
|
||||
starred_repos = list(get_user_starred_repositories(get_authenticated_user(), page=page, limit=limit))
|
||||
return {'repositories': [repo_view(repo) for repo in starred_repos]}
|
||||
|
||||
@require_scope(scopes.READ_REPO)
|
||||
@nickname('createStar')
|
||||
@validate_json_request('NewStarredRepository')
|
||||
def post(self):
|
||||
""" Star a repository. """
|
||||
user = get_authenticated_user()
|
||||
req = request.get_json()
|
||||
namespace = req['namespace']
|
||||
repository = req['repository']
|
||||
repo = model.get_repository(namespace, repository)
|
||||
if repo:
|
||||
model.star_repository(user, repo)
|
||||
log_action('star_repository', user.username, namespace,
|
||||
{'repo': repository, 'namespace': namespace})
|
||||
return {
|
||||
'namespace': namespace,
|
||||
'repository': repository,
|
||||
}, 201
|
||||
|
||||
raise NotFound()
|
||||
|
||||
@resource('/v1/user/starred/<repopath:repository>')
|
||||
class StarredRepository(RepositoryParamResource):
|
||||
""" Operations for managing a specific starred repository. """
|
||||
@nickname('deleteStar')
|
||||
def delete(self, namespace, repository):
|
||||
user = get_authenticated_user()
|
||||
repo = model.get_repository(namespace, repository)
|
||||
if repo:
|
||||
model.unstar_repository(user, repo)
|
||||
log_action('unstar_repository', user.username, namespace,
|
||||
{'repo': repository, 'namespace': namespace})
|
||||
return 'Deleted', 204
|
||||
|
||||
raise NotFound()
|
||||
|
|
Reference in a new issue