Add data interface for api-permissions for v2-2

This commit is contained in:
Evan Cordell 2017-07-18 14:16:41 -04:00
parent fe6760749a
commit a68ec6966e
4 changed files with 304 additions and 134 deletions

View file

@ -0,0 +1,111 @@
import sys
from abc import ABCMeta, abstractmethod
from collections import namedtuple
from six import add_metaclass
class SaveException(Exception):
def __init__(self, other):
self.traceback = sys.exc_info()
super(SaveException, self).__init__(other.message)
class DeleteException(Exception):
def __init__(self, other):
self.traceback = sys.exc_info()
super(DeleteException, self).__init__(other.message)
class Role(namedtuple('Role', ['role_name'])):
def to_dict(self):
return {
'role': self.role_name,
}
class UserPermission(namedtuple('UserPermission', [
'role_name',
'username',
'is_robot',
'avatar',
'is_org_member',
'has_org',
])):
def to_dict(self):
perm_dict = {
'role': self.role_name,
'username': self.username,
'is_robot': False,
'avatar': self.avatar,
}
if self.has_org:
perm_dict['is_org_member'] = self.is_org_member
return perm_dict
class RobotPermission(namedtuple('RobotPermission', [
'role_name',
'username',
'is_robot',
'is_org_member',
])):
def to_dict(self, user=None, team=None, org_members=None):
return {
'role': self.role_name,
'username': self.username,
'is_robot': True,
'is_org_member': self.is_org_member,
}
class TeamPermission(namedtuple('TeamPermission', [
'role_name',
'team_name',
'avatar',
])):
def to_dict(self):
return {
'role': self.role_name,
'name': self.team_name,
'avatar': self.avatar,
}
@add_metaclass(ABCMeta)
class PermissionDataInterface(object):
@abstractmethod
def get_repo_permissions_by_user(self, namespace_name, repository_name):
pass
@abstractmethod
def get_repo_roles(self, username, namespace_name, repository_name):
pass
@abstractmethod
def get_repo_permission_for_user(self, username, namespace_name, repository_name):
pass
@abstractmethod
def set_repo_permission_for_user(self, username, namespace_name, repository_name, role_name):
pass
@abstractmethod
def delete_repo_permission_for_user(self, username, namespace_name, repository_name):
pass
@abstractmethod
def get_repo_permissions_by_team(self, namespace_name, repository_name):
pass
@abstractmethod
def get_repo_role_for_team(self, team_name, namespace_name, repository_name):
pass
@abstractmethod
def set_repo_permission_for_team(self, team_name, namespace_name, repository_name, permission):
pass
@abstractmethod
def delete_repo_permission_for_team(self, team_name, namespace_name, repository_name):
pass