From ac1763d9bdf08a7131a6c523c68fb6991ce1d40c Mon Sep 17 00:00:00 2001 From: Tobias Henkel Date: Thu, 21 Dec 2017 15:36:19 +0100 Subject: Enable direct use of github driver in debug tool The github debugging tool proved to be quite useful for prototyping new stuff using the github api. In the process I ended up copying half of the GithubConnection into it. However for trying out new stuff it would be great to implement and try out the features/fixes directly in the Github driver. And here it is! The script now starts up a standalone version of the Github driver which can be used to query and debug isolated stuff against Github. Change-Id: Ifdad1e69dae009011847869d51ff24000c44adb8 --- tools/github-debugging.py | 92 +++++++++++++++++++++++++++-------------------- 1 file changed, 54 insertions(+), 38 deletions(-) mode change 100644 => 100755 tools/github-debugging.py diff --git a/tools/github-debugging.py b/tools/github-debugging.py old mode 100644 new mode 100755 index 171627ab9..101fd1118 --- a/tools/github-debugging.py +++ b/tools/github-debugging.py @@ -1,55 +1,71 @@ -import github3 +#!/usr/bin/env python3 + import logging -import time + +from zuul.driver.github.githubconnection import GithubConnection +from zuul.driver.github import GithubDriver +from zuul.model import Change, Project # This is a template with boilerplate code for debugging github issues # TODO: for real use override the following variables -url = 'https://example.com' +server = 'github.com' api_token = 'xxxx' -org = 'org' -project = 'project' -pull_nr = 3 +org = 'example' +repo = 'sandbox' +pull_nr = 8 + + +def configure_logging(context): + stream_handler = logging.StreamHandler() + logger = logging.getLogger(context) + logger.addHandler(stream_handler) + logger.setLevel(logging.DEBUG) + + +# uncomment for more logging +# configure_logging('urllib3') +# configure_logging('github3') +# configure_logging('cachecontrol') + + +# This is all that's needed for getting a usable github connection +def create_connection(server, api_token): + driver = GithubDriver() + connection_config = { + 'server': server, + 'api_token': api_token, + } + conn = GithubConnection(driver, 'github', connection_config) + conn._authenticateGithubAPI() + return conn -# Send the logs to stderr as well -stream_handler = logging.StreamHandler() +def get_change(connection: GithubConnection, + org: str, + repo: str, + pull: int) -> Change: + p = Project("%s/%s" % (org, repo), connection.source) + github = connection.getGithubClient(p) + pr = github.pull_request(org, repo, pull) + sha = pr.head.sha + return conn._getChange(p, pull, sha, True) -logger_urllib3 = logging.getLogger('requests.packages.logger_urllib3') -# logger_urllib3.addHandler(stream_handler) -logger_urllib3.setLevel(logging.DEBUG) -logger = logging.getLogger('github3') -# logger.addHandler(stream_handler) -logger.setLevel(logging.DEBUG) +# create github connection +conn = create_connection(server, api_token) -github = github3.GitHubEnterprise(url) +# Now we can do anything we want with the connection, e.g. check canMerge for +# a pull request. +change = get_change(conn, org, repo, pull_nr) +print(conn.canMerge(change, {'cc/gate2'})) -# This is the currently broken cache adapter, enable or replace it to debug -# caching -# import cachecontrol -# from cachecontrol.cache import DictCache -# cache_adapter = cachecontrol.CacheControlAdapter( -# DictCache(), -# cache_etags=True) +# Or just use the github object. +# github = conn.getGithubClient() # -# github.session.mount('http://', cache_adapter) -# github.session.mount('https://', cache_adapter) - - -github.login(token=api_token) - -i = 0 -while True: - pr = github.pull_request(org, project, pull_nr) - prdict = pr.as_dict() - issue = pr.issue() - labels = list(issue.labels()) - print(labels) - i += 1 - print(i) - time.sleep(1) +# repository = github.repository(org, repo) +# print(repository.as_dict()) -- cgit v1.2.1