Test and debug interactions

This commit is contained in:
Ian H Pittwood 2020-02-26 16:05:30 -06:00
parent 01403d9a85
commit 300ab3ee0d
3 changed files with 26 additions and 17 deletions

View File

@ -24,7 +24,7 @@ LOG = logging.getLogger(__name__)
def validate(namespace: argparse.Namespace): def validate(namespace: argparse.Namespace):
arg_dict = vars(namespace) arg_dict = vars(namespace)
if not ((arg_dict['github_username'] and arg_dict['github_password']) or arg_dict['github_token']): if not ((arg_dict['github_user'] and arg_dict['github_password']) or arg_dict['github_token']):
raise errors.GithubConfigurationError raise errors.GithubConfigurationError
return arg_dict return arg_dict
@ -45,7 +45,7 @@ if __name__ == '__main__':
) )
parser.add_argument('-g', '--gerrit-url', action='store', required=True, type=str, parser.add_argument('-g', '--gerrit-url', action='store', required=True, type=str,
default=os.getenv('GERRIT_URL', default=None), help='Target Gerrit URL.') default=os.getenv('GERRIT_URL', default=None), help='Target Gerrit URL.')
parser.add_argument('-u', '--github-username', action='store', required=False, type=str, parser.add_argument('-u', '--github-user', action='store', required=False, type=str,
default=os.getenv('GITHUB_USER', default=None), default=os.getenv('GITHUB_USER', default=None),
help='Username to use for GitHub Issues integration. Defaults to GITHUB_USER in ' help='Username to use for GitHub Issues integration. Defaults to GITHUB_USER in '
'environmental variables. Must be used with a password.') 'environmental variables. Must be used with a password.')
@ -57,8 +57,15 @@ if __name__ == '__main__':
default=os.getenv('GITHUB_TOKEN', default=None), default=os.getenv('GITHUB_TOKEN', default=None),
help='Token to use for GitHub Issues integration. Defaults to GITHUB_TOKEN in ' help='Token to use for GitHub Issues integration. Defaults to GITHUB_TOKEN in '
'environmental variables. This will be preferred over a username/password.') 'environmental variables. This will be preferred over a username/password.')
parser.add_argument('-v', '--verbose', action='store_true', required=False,
default=False, help='Enabled DEBUG level logging.')
parser.add_argument('gerrit_project_name', action='store', type=str, help='Target Gerrit project.') parser.add_argument('gerrit_project_name', action='store', type=str, help='Target Gerrit project.')
parser.add_argument('github_project_name', action='store', type=str, help='Target Github project.') parser.add_argument('github_project_name', action='store', type=str, help='Target Github project.')
ns = parser.parse_args() ns = parser.parse_args()
args = validate(ns) args = validate(ns)
if args['verbose']:
logging.basicConfig(format=LOG_FORMAT, level=logging.DEBUG)
else:
logging.basicConfig(format=LOG_FORMAT, level=logging.INFO)
args.pop('verbose')
update(**args) update(**args)

View File

@ -20,11 +20,11 @@ import github_issues
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
def update(gerrit_url: str, gerrit_project_name: str, github_project_name: str, github_user: str, github_pw: str, def update(gerrit_url: str, gerrit_project_name: str, github_project_name: str, github_user: str, github_password: str,
github_token: str): github_token: str):
repo = github_issues.get_repo(github_project_name, github_user, github_pw, github_token) repo = github_issues.get_repo(github_project_name, github_user, github_password, github_token)
change_list = gerrit.get_changes(gerrit_url, gerrit_project_name) change_list = gerrit.get_changes(gerrit_url, gerrit_project_name)
for change in change_list: for change in change_list['data']:
if 'commitMessage' in change: if 'commitMessage' in change:
process_change(change, repo, gerrit_url) process_change(change, repo, gerrit_url)
@ -46,23 +46,25 @@ def process_change(change: dict, repo: Repository, gerrit_url: str):
issue.edit(state='open') issue.edit(state='open')
comment_msg += 'Issue reopened due to new activity on Gerrit.\n\n' comment_msg += 'Issue reopened due to new activity on Gerrit.\n\n'
if 'WIP' in change['commitMessage'] or 'DNM' in change['commitMessage']: if 'WIP' in change['commitMessage'] or 'DNM' in change['commitMessage']:
LOG.debug(f'add `wip` to {issue_number}') LOG.debug(f'add `wip` to #{issue_number}')
#issue.add_to_labels('wip') issue.add_to_labels('wip')
try: try:
LOG.debug(f'rm `ready for review` to {issue_number}') LOG.debug(f'rm `ready for review` to #{issue_number}')
#issue.remove_from_labels('ready for review') issue.remove_from_labels('ready for review')
except github.GithubException: except github.GithubException:
LOG.debug(f'`ready for review` tag does not exist on issue #{issue_number}') LOG.debug(f'`ready for review` tag does not exist on issue #{issue_number}')
else: else:
LOG.debug(f'add `ready for review` to {issue_number}') LOG.debug(f'add `ready for review` to #{issue_number}')
#issue.add_to_labels('ready for review') issue.add_to_labels('ready for review')
try: try:
LOG.debug(f'rm `wip` to {issue_number}') LOG.debug(f'rm `wip` to #{issue_number}')
#issue.remove_from_labels('wip') issue.remove_from_labels('wip')
except github.GithubException: except github.GithubException:
LOG.debug(f'`wip` tag does not exist on issue #{issue_number}') LOG.debug(f'`wip` tag does not exist on issue #{issue_number}')
if not link_exists: if not link_exists:
comment_msg += f'New Related Change: {gerrit_url}' comment_msg += f'New Related Change: {change_url}\n' \
f'Authored By: {change["owner"]["name"]} ({change["owner"]["email"]})'
if comment_msg: if comment_msg:
#issue.create_comment(comment_msg) issue.create_comment(comment_msg)
LOG.info(f'Comment posted to issue #{gerrit_url}') LOG.debug(f'Comment to post on #{issue_number}: {comment_msg}')
LOG.info(f'Comment posted to issue #{issue_number}')

View File

@ -14,7 +14,7 @@ import json
from fabric import Connection from fabric import Connection
def get_changes(gerrit_url: str, project_name: str, port: int = 29418) -> list: def get_changes(gerrit_url: str, project_name: str, port: int = 29418) -> dict:
cmd = f'gerrit query --format=JSON status:open project:{project_name}' cmd = f'gerrit query --format=JSON status:open project:{project_name}'
result = Connection(gerrit_url, port=port).run(cmd) result = Connection(gerrit_url, port=port).run(cmd)
processed_stdout = '{"data":[%s]}' % ','.join(list(filter(None, result.stdout.split('\n')))) processed_stdout = '{"data":[%s]}' % ','.join(list(filter(None, result.stdout.split('\n'))))