Merge pull request #2599 from coreos-inc/no-seriously-frack-you-gitlab

Anything can be None in GitLab!
This commit is contained in:
josephschorr 2017-05-01 20:11:41 -04:00 committed by GitHub
commit a78d5fb9ff
2 changed files with 26 additions and 14 deletions

View file

@ -307,23 +307,30 @@ class GitLabBuildTrigger(BuildTriggerHandler):
@_catch_timeouts @_catch_timeouts
def list_build_sources_for_namespace(self, namespace): def list_build_sources_for_namespace(self, namespace):
def repo_view(repo): def repo_view(repo):
last_modified = dateutil.parser.parse(repo['last_activity_at']) # Because *anything* can be None in GitLab API!
has_admin_permission = False permissions = repo.get('permissions') or {}
project_access = permissions.get('project_access') or {}
if repo.get('permissions'): access_level = project_access.get('access_level') or 0
access_level = repo['permissions']['project_access']['access_level']
has_admin_permission = _ACCESS_LEVEL_MAP.get(access_level, ("", False))[1] has_admin_permission = _ACCESS_LEVEL_MAP.get(access_level, ("", False))[1]
return { view = {
'name': repo['path'], 'name': repo['path'],
'full_name': repo['path_with_namespace'], 'full_name': repo['path_with_namespace'],
'description': repo['description'] or '', 'description': repo.get('description') or '',
'last_updated': timegm(last_modified.utctimetuple()), 'url': repo.get('web_url'),
'url': repo['web_url'],
'has_admin_permissions': has_admin_permission, 'has_admin_permissions': has_admin_permission,
'private': repo['public'] is False, 'private': repo.get('public', False) is False,
} }
if repo.get('last_activity_at'):
try:
last_modified = dateutil.parser.parse(repo['last_activity_at'])
view['last_updated'] = timegm(last_modified.utctimetuple())
except ValueError:
logger.exception('Gitlab gave us an invalid last_activity_at: %s', last_modified)
return view
gl_client = self._get_authorized_client() gl_client = self._get_authorized_client()
repositories = _paginated_iterator(gl_client.getprojects, RepositoryReadException) repositories = _paginated_iterator(gl_client.getprojects, RepositoryReadException)
repos = [repo_view(repo) for repo in repositories if repo['namespace']['path'] == namespace] repos = [repo_view(repo) for repo in repositories if repo['namespace']['path'] == namespace]

View file

@ -27,6 +27,13 @@ def get_currentuser_mock():
} }
def project(namespace, name, is_org=False): def project(namespace, name, is_org=False):
project_access = None
if namespace == 'knownuser':
project_access = {
'access_level': 50,
}
data = { data = {
'id': '%s/%s' % (namespace, name), 'id': '%s/%s' % (namespace, name),
'default_branch': 'master', 'default_branch': 'master',
@ -43,9 +50,7 @@ def project(namespace, name, is_org=False):
'ssh_url_to_repo': 'git://%s/%s' % (namespace, name), 'ssh_url_to_repo': 'git://%s/%s' % (namespace, name),
'public': name != 'somerepo', 'public': name != 'somerepo',
'permissions': { 'permissions': {
'project_access': { 'project_access': project_access,
'access_level': 50 if namespace == 'knownuser' else 0,
}
}, },
'owner': { 'owner': {
'avatar_url': 'avatarurl', 'avatar_url': 'avatarurl',