Link the org api calls to their related user resources.
This commit is contained in:
parent
4d551a079b
commit
83bc965556
8 changed files with 36 additions and 25 deletions
|
@ -58,7 +58,7 @@ def method_metadata(func, name):
|
||||||
|
|
||||||
|
|
||||||
nickname = partial(add_method_metadata, 'nickname')
|
nickname = partial(add_method_metadata, 'nickname')
|
||||||
internal_api = add_method_metadata('internal_api', True)
|
related_user_resource = partial(add_method_metadata, 'related_user_resource')
|
||||||
|
|
||||||
|
|
||||||
def query_param(name, help_str, type=reqparse.text_type, default=None,
|
def query_param(name, help_str, type=reqparse.text_type, default=None,
|
||||||
|
|
|
@ -4,7 +4,8 @@ import stripe
|
||||||
from flask import request
|
from flask import request
|
||||||
from flask.ext.restful import abort
|
from flask.ext.restful import abort
|
||||||
|
|
||||||
from endpoints.api import resource, nickname, ApiResource, validate_json_request, log_action
|
from endpoints.api import (resource, nickname, ApiResource, validate_json_request, log_action,
|
||||||
|
related_user_resource)
|
||||||
from endpoints.api.subscribe import subscribe, subscription_view
|
from endpoints.api.subscribe import subscribe, subscription_view
|
||||||
from auth.permissions import AdministerOrganizationPermission
|
from auth.permissions import AdministerOrganizationPermission
|
||||||
from auth.auth_context import get_authenticated_user
|
from auth.auth_context import get_authenticated_user
|
||||||
|
@ -126,6 +127,7 @@ class UserCard(ApiResource):
|
||||||
|
|
||||||
|
|
||||||
@resource('/v1/organization/<orgname>/card')
|
@resource('/v1/organization/<orgname>/card')
|
||||||
|
@related_user_resource(UserCard)
|
||||||
class OrganizationCard(ApiResource):
|
class OrganizationCard(ApiResource):
|
||||||
""" Resource for managing an organization's credit card. """
|
""" Resource for managing an organization's credit card. """
|
||||||
schemas = {
|
schemas = {
|
||||||
|
@ -145,7 +147,6 @@ class OrganizationCard(ApiResource):
|
||||||
}
|
}
|
||||||
|
|
||||||
@nickname('getOrgCard')
|
@nickname('getOrgCard')
|
||||||
# @org_api_call('getOrgCard')
|
|
||||||
def get(self, orgname):
|
def get(self, orgname):
|
||||||
""" Get the organization's credit card. """
|
""" Get the organization's credit card. """
|
||||||
permission = AdministerOrganizationPermission(orgname)
|
permission = AdministerOrganizationPermission(orgname)
|
||||||
|
@ -156,7 +157,6 @@ class OrganizationCard(ApiResource):
|
||||||
abort(403)
|
abort(403)
|
||||||
|
|
||||||
@nickname('setOrgCard')
|
@nickname('setOrgCard')
|
||||||
# @org_api_call('set_user_card')
|
|
||||||
@validate_json_request('OrgCard')
|
@validate_json_request('OrgCard')
|
||||||
def post(self, orgname):
|
def post(self, orgname):
|
||||||
""" Update the orgnaization's credit card. """
|
""" Update the orgnaization's credit card. """
|
||||||
|
@ -223,6 +223,7 @@ class UserPlan(ApiResource):
|
||||||
|
|
||||||
|
|
||||||
@resource('/v1/organization/<orgname>/plan')
|
@resource('/v1/organization/<orgname>/plan')
|
||||||
|
@related_user_resource(UserPlan)
|
||||||
class OrganizationPlan(ApiResource):
|
class OrganizationPlan(ApiResource):
|
||||||
""" Resource for managing a org's subscription. """
|
""" Resource for managing a org's subscription. """
|
||||||
schemas = {
|
schemas = {
|
||||||
|
@ -246,7 +247,6 @@ class OrganizationPlan(ApiResource):
|
||||||
}
|
}
|
||||||
|
|
||||||
@nickname('updateOrgSubscription')
|
@nickname('updateOrgSubscription')
|
||||||
# @org_api_call('update_user_subscription')
|
|
||||||
@validate_json_request('OrgSubscription')
|
@validate_json_request('OrgSubscription')
|
||||||
def put(self, orgname):
|
def put(self, orgname):
|
||||||
""" Create or update the org's subscription. """
|
""" Create or update the org's subscription. """
|
||||||
|
@ -261,7 +261,6 @@ class OrganizationPlan(ApiResource):
|
||||||
abort(403)
|
abort(403)
|
||||||
|
|
||||||
@nickname('getOrgSubscription')
|
@nickname('getOrgSubscription')
|
||||||
# @org_api_call('get_user_subscription')
|
|
||||||
def get(self, orgname):
|
def get(self, orgname):
|
||||||
""" Fetch any existing subscription for the org. """
|
""" Fetch any existing subscription for the org. """
|
||||||
permission = AdministerOrganizationPermission(orgname)
|
permission = AdministerOrganizationPermission(orgname)
|
||||||
|
@ -296,10 +295,10 @@ class UserInvoiceList(ApiResource):
|
||||||
|
|
||||||
|
|
||||||
@resource('/v1/organization/<orgname>/invoices')
|
@resource('/v1/organization/<orgname>/invoices')
|
||||||
|
@related_user_resource(UserInvoiceList)
|
||||||
class OrgnaizationInvoiceList(ApiResource):
|
class OrgnaizationInvoiceList(ApiResource):
|
||||||
""" Resource for listing an orgnaization's invoices. """
|
""" Resource for listing an orgnaization's invoices. """
|
||||||
@nickname('listOrgInvoices')
|
@nickname('listOrgInvoices')
|
||||||
# @org_api_call('list_user_invoices')
|
|
||||||
def get(self, orgname):
|
def get(self, orgname):
|
||||||
""" List the invoices for the specified orgnaization. """
|
""" List the invoices for the specified orgnaization. """
|
||||||
permission = AdministerOrganizationPermission(orgname)
|
permission = AdministerOrganizationPermission(orgname)
|
||||||
|
|
|
@ -23,6 +23,11 @@ TYPE_CONVERTER = {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def fully_qualified_name(method_view_class):
|
||||||
|
inst = method_view_class()
|
||||||
|
return '%s.%s' % (inst.__module__, inst.__class__.__name__)
|
||||||
|
|
||||||
|
|
||||||
def swagger_route_data():
|
def swagger_route_data():
|
||||||
apis = []
|
apis = []
|
||||||
models = {}
|
models = {}
|
||||||
|
@ -47,7 +52,9 @@ def swagger_route_data():
|
||||||
'required': True,
|
'required': True,
|
||||||
})
|
})
|
||||||
|
|
||||||
if method is not None:
|
if method is None:
|
||||||
|
logger.debug('Unable to find method for %s in class %s', method_name, view_class)
|
||||||
|
else:
|
||||||
req_schema_name = method_metadata(method, 'request_schema')
|
req_schema_name = method_metadata(method, 'request_schema')
|
||||||
if req_schema_name:
|
if req_schema_name:
|
||||||
parameters.append({
|
parameters.append({
|
||||||
|
@ -93,11 +100,17 @@ def swagger_route_data():
|
||||||
operations.append(new_operation)
|
operations.append(new_operation)
|
||||||
|
|
||||||
swagger_path = PARAM_REGEX.sub(r'{\2}', rule.rule)
|
swagger_path = PARAM_REGEX.sub(r'{\2}', rule.rule)
|
||||||
apis.append({
|
new_resource = {
|
||||||
'path': swagger_path,
|
'path': swagger_path,
|
||||||
'description': view_class.__doc__ if view_class.__doc__ else "",
|
'description': view_class.__doc__ if view_class.__doc__ else "",
|
||||||
'operations': operations,
|
'operations': operations,
|
||||||
})
|
'name': fully_qualified_name(view_class),
|
||||||
|
}
|
||||||
|
related_user_res = method_metadata(view_class, 'related_user_resource')
|
||||||
|
if related_user_res is not None:
|
||||||
|
new_resource['related'] = fully_qualified_name(related_user_res)
|
||||||
|
|
||||||
|
apis.append(new_resource)
|
||||||
|
|
||||||
swagger_data = {
|
swagger_data = {
|
||||||
'apiVersion': 'v1',
|
'apiVersion': 'v1',
|
||||||
|
|
|
@ -4,7 +4,7 @@ from datetime import datetime, timedelta
|
||||||
from flask.ext.restful import abort
|
from flask.ext.restful import abort
|
||||||
|
|
||||||
from endpoints.api import (resource, nickname, ApiResource, query_param, parse_args,
|
from endpoints.api import (resource, nickname, ApiResource, query_param, parse_args,
|
||||||
RepositoryParamResource, require_repo_admin)
|
RepositoryParamResource, require_repo_admin, related_user_resource)
|
||||||
from auth.permissions import AdministerOrganizationPermission, AdministerOrganizationPermission
|
from auth.permissions import AdministerOrganizationPermission, AdministerOrganizationPermission
|
||||||
from auth.auth_context import get_authenticated_user
|
from auth.auth_context import get_authenticated_user
|
||||||
from data import model
|
from data import model
|
||||||
|
@ -82,6 +82,7 @@ class RepositoryLogs(RepositoryParamResource):
|
||||||
|
|
||||||
|
|
||||||
@resource('/v1/organization/<orgname>/logs')
|
@resource('/v1/organization/<orgname>/logs')
|
||||||
|
@related_user_resource(UserLogs)
|
||||||
class OrgLogs(ApiResource):
|
class OrgLogs(ApiResource):
|
||||||
""" Resource for fetching logs for the entire organization. """
|
""" Resource for fetching logs for the entire organization. """
|
||||||
@nickname('listOrgLogs')
|
@nickname('listOrgLogs')
|
||||||
|
@ -89,7 +90,6 @@ class OrgLogs(ApiResource):
|
||||||
@query_param('starttime', 'Earliest time from which to get logs. (%m/%d/%Y %Z)', type=str)
|
@query_param('starttime', 'Earliest time from which to get logs. (%m/%d/%Y %Z)', type=str)
|
||||||
@query_param('endtime', 'Latest time to which to get logs. (%m/%d/%Y %Z)', type=str)
|
@query_param('endtime', 'Latest time to which to get logs. (%m/%d/%Y %Z)', type=str)
|
||||||
@query_param('performer', 'Username for which to filter logs.', type=str)
|
@query_param('performer', 'Username for which to filter logs.', type=str)
|
||||||
# @org_api_call('list_user_logs')
|
|
||||||
def get(self, args, orgname):
|
def get(self, args, orgname):
|
||||||
""" List the logs for the specified organization. """
|
""" List the logs for the specified organization. """
|
||||||
permission = AdministerOrganizationPermission(orgname)
|
permission = AdministerOrganizationPermission(orgname)
|
||||||
|
|
|
@ -4,8 +4,10 @@ import stripe
|
||||||
from flask import request
|
from flask import request
|
||||||
from flask.ext.restful import abort
|
from flask.ext.restful import abort
|
||||||
|
|
||||||
from endpoints.api import resource, nickname, ApiResource, validate_json_request, request_error
|
from endpoints.api import (resource, nickname, ApiResource, validate_json_request, request_error,
|
||||||
|
related_user_resource)
|
||||||
from endpoints.api.team import team_view
|
from endpoints.api.team import team_view
|
||||||
|
from endpoints.api.user import User, PrivateRepositories
|
||||||
from auth.permissions import (AdministerOrganizationPermission, OrganizationMemberPermission,
|
from auth.permissions import (AdministerOrganizationPermission, OrganizationMemberPermission,
|
||||||
CreateRepositoryPermission)
|
CreateRepositoryPermission)
|
||||||
from auth.auth_context import get_authenticated_user
|
from auth.auth_context import get_authenticated_user
|
||||||
|
@ -35,7 +37,7 @@ def org_view(o, teams):
|
||||||
return view
|
return view
|
||||||
|
|
||||||
|
|
||||||
@resource('/v1/organization/', methods=['POST'])
|
@resource('/v1/organization/')
|
||||||
class OrganizationList(ApiResource):
|
class OrganizationList(ApiResource):
|
||||||
""" Resource for creating organizations. """
|
""" Resource for creating organizations. """
|
||||||
schemas = {
|
schemas = {
|
||||||
|
@ -88,7 +90,8 @@ class OrganizationList(ApiResource):
|
||||||
return request_error(exception=ex)
|
return request_error(exception=ex)
|
||||||
|
|
||||||
|
|
||||||
@resource('/v1/organization/<orgname>', methods=['GET'])
|
@resource('/v1/organization/<orgname>')
|
||||||
|
@related_user_resource(User)
|
||||||
class Organization(ApiResource):
|
class Organization(ApiResource):
|
||||||
""" Resource for managing organizations. """
|
""" Resource for managing organizations. """
|
||||||
schemas = {
|
schemas = {
|
||||||
|
@ -124,7 +127,6 @@ class Organization(ApiResource):
|
||||||
|
|
||||||
abort(403)
|
abort(403)
|
||||||
|
|
||||||
# @org_api_call('change_user_details')
|
|
||||||
@nickname('changeOrganizationDetails')
|
@nickname('changeOrganizationDetails')
|
||||||
@validate_json_request('UpdateOrg')
|
@validate_json_request('UpdateOrg')
|
||||||
def put(self, orgname):
|
def put(self, orgname):
|
||||||
|
@ -152,9 +154,9 @@ class Organization(ApiResource):
|
||||||
|
|
||||||
|
|
||||||
@resource('/v1/organization/<orgname>/private')
|
@resource('/v1/organization/<orgname>/private')
|
||||||
|
@related_user_resource(PrivateRepositories)
|
||||||
class OrgPrivateRepositories(ApiResource):
|
class OrgPrivateRepositories(ApiResource):
|
||||||
""" Custom verb to compute whether additional private repositories are available. """
|
""" Custom verb to compute whether additional private repositories are available. """
|
||||||
# @org_api_call('get_user_private_allowed')
|
|
||||||
@nickname('getOrganizationPrivateAllowed')
|
@nickname('getOrganizationPrivateAllowed')
|
||||||
def get(self, orgname):
|
def get(self, orgname):
|
||||||
""" Return whether or not this org is allowed to create new private repositories. """
|
""" Return whether or not this org is allowed to create new private repositories. """
|
||||||
|
|
|
@ -79,8 +79,7 @@ class RepositoryUserPermissionList(RepositoryParamResource):
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@resource('/v1/repository/<path:repository>/permissions/user/<username>',
|
@resource('/v1/repository/<path:repository>/permissions/user/<username>')
|
||||||
methods=['GET'])
|
|
||||||
class RepositoryUserPermission(RepositoryParamResource):
|
class RepositoryUserPermission(RepositoryParamResource):
|
||||||
""" Resource for managing individual user permissions. """
|
""" Resource for managing individual user permissions. """
|
||||||
schemas = {
|
schemas = {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
from flask.ext.restful import abort
|
from flask.ext.restful import abort
|
||||||
|
|
||||||
from endpoints.api import resource, nickname, ApiResource, log_action
|
from endpoints.api import resource, nickname, ApiResource, log_action, related_user_resource
|
||||||
from auth.permissions import AdministerOrganizationPermission, OrganizationMemberPermission
|
from auth.permissions import AdministerOrganizationPermission, OrganizationMemberPermission
|
||||||
from auth.auth_context import get_authenticated_user
|
from auth.auth_context import get_authenticated_user
|
||||||
from data import model
|
from data import model
|
||||||
|
@ -50,10 +50,10 @@ class UserRobot(ApiResource):
|
||||||
|
|
||||||
|
|
||||||
@resource('/v1/organization/<orgname>/robots')
|
@resource('/v1/organization/<orgname>/robots')
|
||||||
|
@related_user_resource(UserRobotList)
|
||||||
class OrgRobotList(ApiResource):
|
class OrgRobotList(ApiResource):
|
||||||
""" Resource for listing an organization's robots. """
|
""" Resource for listing an organization's robots. """
|
||||||
@nickname('getOrgRobots')
|
@nickname('getOrgRobots')
|
||||||
#@org_api_call('get_user_robots')
|
|
||||||
def get(self, orgname):
|
def get(self, orgname):
|
||||||
""" List the organization's robots. """
|
""" List the organization's robots. """
|
||||||
permission = OrganizationMemberPermission(orgname)
|
permission = OrganizationMemberPermission(orgname)
|
||||||
|
@ -67,10 +67,10 @@ class OrgRobotList(ApiResource):
|
||||||
|
|
||||||
|
|
||||||
@resource('/v1/organization/<orgname>/robots/<robot_shortname>')
|
@resource('/v1/organization/<orgname>/robots/<robot_shortname>')
|
||||||
|
@related_user_resource(UserRobot)
|
||||||
class OrgRobot(ApiResource):
|
class OrgRobot(ApiResource):
|
||||||
""" Resource for managing an organization's robots. """
|
""" Resource for managing an organization's robots. """
|
||||||
@nickname('createOrgRobot')
|
@nickname('createOrgRobot')
|
||||||
#@org_api_call('create_user_robot')
|
|
||||||
def put(self, orgname, robot_shortname):
|
def put(self, orgname, robot_shortname):
|
||||||
""" Create a new robot in the organization. """
|
""" Create a new robot in the organization. """
|
||||||
permission = AdministerOrganizationPermission(orgname)
|
permission = AdministerOrganizationPermission(orgname)
|
||||||
|
@ -85,7 +85,6 @@ class OrgRobot(ApiResource):
|
||||||
abort(403)
|
abort(403)
|
||||||
|
|
||||||
@nickname('deleteOrgRobot')
|
@nickname('deleteOrgRobot')
|
||||||
#@org_api_call('delete_user_robot')
|
|
||||||
def delete(self, orgname, robot_shortname):
|
def delete(self, orgname, robot_shortname):
|
||||||
""" Delete an existing organization robot. """
|
""" Delete an existing organization robot. """
|
||||||
permission = AdministerOrganizationPermission(orgname)
|
permission = AdministerOrganizationPermission(orgname)
|
||||||
|
|
|
@ -27,8 +27,7 @@ def member_view(member):
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@resource('/v1/organization/<orgname>/team/<teamname>',
|
@resource('/v1/organization/<orgname>/team/<teamname>')
|
||||||
methods=['PUT', 'POST'])
|
|
||||||
class OrganizationTeam(ApiResource):
|
class OrganizationTeam(ApiResource):
|
||||||
""" Resource for manging an organization's teams. """
|
""" Resource for manging an organization's teams. """
|
||||||
schemas = {
|
schemas = {
|
||||||
|
|
Reference in a new issue