Holy black magic batman, move the query parameters to decorators and expose them through discovery.
This commit is contained in:
parent
b3e0dfae48
commit
978d68f0e0
5 changed files with 209 additions and 135 deletions
|
@ -1,13 +1,14 @@
|
|||
import logging
|
||||
import json
|
||||
|
||||
from flask.ext.restful import Resource, Api, reqparse, abort
|
||||
from flask.ext.restful import Resource, reqparse, abort
|
||||
from flask.ext.login import current_user
|
||||
|
||||
from data import model
|
||||
from endpoints.api import (api, truthy_bool, format_date, nickname, log_action,
|
||||
from endpoints.api import (truthy_bool, format_date, nickname, log_action,
|
||||
validate_json_request, require_repo_read,
|
||||
RepositoryParamResource)
|
||||
RepositoryParamResource, resource, query_parameter,
|
||||
parse_args)
|
||||
from auth.permissions import (ReadRepositoryPermission,
|
||||
ModifyRepositoryPermission,
|
||||
AdministerRepositoryPermission)
|
||||
|
@ -15,15 +16,6 @@ from auth.permissions import (ReadRepositoryPermission,
|
|||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
repo_api = Api(api)
|
||||
|
||||
|
||||
def resource(*urls, **kwargs):
|
||||
def wrapper(api_resource):
|
||||
repo_api.add_resource(api_resource, *urls, **kwargs)
|
||||
return api_resource
|
||||
return wrapper
|
||||
|
||||
|
||||
@resource('/v1/repository')
|
||||
class RepositoryList(Resource):
|
||||
|
@ -97,17 +89,21 @@ class RepositoryList(Resource):
|
|||
abort(403)
|
||||
|
||||
@nickname('listRepos')
|
||||
def get(self):
|
||||
parser = reqparse.RequestParser()
|
||||
parser.add_argument('page', type=int, help='Page number must be an int.')
|
||||
parser.add_argument('limit', type=int, help='Limit must be an int.')
|
||||
parser.add_argument('namespace', type=str)
|
||||
parser.add_argument('public', type=truthy_bool, default=True)
|
||||
parser.add_argument('private', type=truthy_bool, default=True)
|
||||
parser.add_argument('sort', type=truthy_bool, default=False)
|
||||
parser.add_argument('count', type=truthy_bool, default=False)
|
||||
args = parser.parse_args()
|
||||
|
||||
@parse_args
|
||||
@query_parameter('page', 'Offset page number. (int)', type=int)
|
||||
@query_parameter('limit', 'Limit on the number of results (int)', type=int)
|
||||
@query_parameter('namespace', ('Namespace to use when querying for org '
|
||||
'repositories.'), type=str)
|
||||
@query_parameter('public', 'Whether to include public repositories.',
|
||||
type=truthy_bool, default=True)
|
||||
@query_parameter('private', 'Whether to inlcude private repositories.',
|
||||
type=truthy_bool, default=True)
|
||||
@query_parameter('sort', 'Whether to sort the results.', type=truthy_bool,
|
||||
default=False)
|
||||
@query_parameter('count', ('Whether to include a count of the total number '
|
||||
'of results available.'), type=truthy_bool,
|
||||
default=False)
|
||||
def get(self, args):
|
||||
def repo_view(repo_obj):
|
||||
return {
|
||||
'namespace': repo_obj.namespace,
|
||||
|
|
Reference in a new issue