Merge branch 'master' of ssh://bitbucket.org/yackob03/quay

This commit is contained in:
yackob03 2014-01-13 16:33:04 -05:00
commit 97d179cafb
4 changed files with 84 additions and 6 deletions

View file

@ -498,13 +498,23 @@ def get_user_teams_within_org(username, organization):
User.username == username) User.username == username)
def get_visible_repositories(username=None, include_public=True, limit=None, def get_visible_repository_count(username=None, include_public=True, sort=False, namespace=None):
return get_visible_repository_internal(username=username, include_public=include_public,
sort=sort, namespace=namespace, get_count=True)
def get_visible_repositories(username=None, include_public=True, page=None, limit=None,
sort=False, namespace=None): sort=False, namespace=None):
return get_visible_repository_internal(username=username, include_public=include_public, page=page,
limit=limit, sort=sort, namespace=namespace, get_count=False)
def get_visible_repository_internal(username=None, include_public=True, limit=None, page=None,
sort=False, namespace=None, get_count=False):
if not username and not include_public: if not username and not include_public:
return [] return []
query = (Repository query = (Repository
.select(Repository, Visibility) .select() # Note: We need to leave this blank for the get_count case. Otherwise, MySQL/RDS complains.
.distinct() .distinct()
.join(Visibility) .join(Visibility)
.switch(Repository) .switch(Repository)
@ -552,10 +562,19 @@ def get_visible_repositories(username=None, include_public=True, limit=None,
else: else:
where_clause = new_clause where_clause = new_clause
if limit: if sort:
query = query.order_by(Repository.description.desc())
if page:
query = query.paginate(page, limit)
elif limit:
query = query.limit(limit) query = query.limit(limit)
return query.where(where_clause) where = query.where(where_clause)
if get_count:
return where.count()
else:
return where
def get_matching_repositories(repo_term, username=None): def get_matching_repositories(repo_term, username=None):

View file

@ -790,11 +790,13 @@ def list_repos():
'is_public': repo_obj.visibility.name == 'public', 'is_public': repo_obj.visibility.name == 'public',
} }
page = request.args.get('page', None)
limit = request.args.get('limit', None) limit = request.args.get('limit', None)
namespace_filter = request.args.get('namespace', None) namespace_filter = request.args.get('namespace', None)
include_public = request.args.get('public', 'true') include_public = request.args.get('public', 'true')
include_private = request.args.get('private', 'true') include_private = request.args.get('private', 'true')
sort = request.args.get('sort', 'false') sort = request.args.get('sort', 'false')
include_count = request.args.get('count', 'false')
try: try:
limit = int(limit) if limit else None limit = int(limit) if limit else None
@ -803,21 +805,38 @@ def list_repos():
include_public = include_public == 'true' include_public = include_public == 'true'
include_private = include_private == 'true' include_private = include_private == 'true'
include_count = include_count == 'true'
sort = sort == 'true' sort = sort == 'true'
if page:
try:
page = int(page)
except:
page = None
username = None username = None
if current_user.is_authenticated() and include_private: if current_user.is_authenticated() and include_private:
username = current_user.db_user().username username = current_user.db_user().username
repo_query = model.get_visible_repositories(username, limit=limit, repo_count = None
if include_count:
repo_count = model.get_visible_repository_count(username,
include_public=include_public,
sort=sort,
namespace=namespace_filter)
repo_query = model.get_visible_repositories(username, limit=limit, page=page,
include_public=include_public, include_public=include_public,
sort=sort, sort=sort,
namespace=namespace_filter) namespace=namespace_filter)
repos = [repo_view(repo) for repo in repo_query] repos = [repo_view(repo) for repo in repo_query]
response = { response = {
'repositories': repos 'repositories': repos
} }
if include_count:
response['count'] = repo_count
return jsonify(response) return jsonify(response)

View file

@ -50,6 +50,8 @@ function SecurityCtrl($scope) {
function RepoListCtrl($scope, Restangular, UserService, ApiService) { function RepoListCtrl($scope, Restangular, UserService, ApiService) {
$scope.namespace = null; $scope.namespace = null;
$scope.page = 1;
$scope.publicPageCount = null;
// Monitor changes in the user. // Monitor changes in the user.
UserService.updateUserIn($scope, function() { UserService.updateUserIn($scope, function() {
@ -61,6 +63,23 @@ function RepoListCtrl($scope, Restangular, UserService, ApiService) {
loadMyRepos(namespace); loadMyRepos(namespace);
}); });
$scope.movePublicPage = function(increment) {
if ($scope.publicPageCount == null) {
return;
}
$scope.page += increment;
if ($scope.page < 1) {
$scope.page = 1;
}
if ($scope.page > $scope.publicPageCount) {
$scope.page = $scope.publicPageCount;
}
loadPublicRepos();
};
var loadMyRepos = function(namespace) { var loadMyRepos = function(namespace) {
if (!$scope.user || $scope.user.anonymous || !namespace) { if (!$scope.user || $scope.user.anonymous || !namespace) {
return; return;
@ -74,8 +93,19 @@ function RepoListCtrl($scope, Restangular, UserService, ApiService) {
}; };
var loadPublicRepos = function() { var loadPublicRepos = function() {
var options = {'public': true, 'private': false, 'sort': true, 'limit': 10}; var options = {
'public': true,
'private': false,
'sort': true,
'limit': 10,
'page': $scope.page,
'count': $scope.page == 1
};
$scope.public_repositories = ApiService.listReposAsResource().withOptions(options).get(function(resp) { $scope.public_repositories = ApiService.listReposAsResource().withOptions(options).get(function(resp) {
if (resp.count) {
$scope.publicPageCount = Math.ceil(resp.count / 10);
}
return resp.repositories; return resp.repositories;
}); });
}; };

View file

@ -53,6 +53,16 @@
<a ng-href="/repository/{{repository.namespace}}/{{ repository.name }}">{{repository.namespace}}/{{repository.name}}</a> <a ng-href="/repository/{{repository.namespace}}/{{ repository.name }}">{{repository.namespace}}/{{repository.name}}</a>
<div class="description markdown-view" content="repository.description" first-line-only="true"></div> <div class="description markdown-view" content="repository.description" first-line-only="true"></div>
</div> </div>
<div class="page-controls">
<button class="btn btn-default" title="Previous Page" bs-tooltip="title" ng-show="page > 1"
ng-click="movePublicPage(-1)">
<i class="fa fa-chevron-left"></i>
</button>
<button class="btn btn-default" title="Next Page" bs-tooltip="title" ng-show="page < publicPageCount"
ng-click="movePublicPage(1)">
<i class="fa fa-chevron-right"></i>
</button>
</div>
</div> </div>
</div> </div>
</div> </div>