#!/usr/bin/env python import argparse import re import requests import sys import otc_metadata.services api_session = requests.Session() def open_issue(args, repository, issue_data): req = dict( title=issue_data["title"], body=issue_data["body"].replace("\\n", "\n") ) if "assignees" in issue_data: req["assignees"] = issue_data["assignees"] if "labels" in issue_data: req["labels"] = issue_data["labels"] print(req) rsp = api_session.post( f"{args.api_url}/repos/{repository}/issues", json=req ) if rsp.status_code != 201: print(rsp.text) print(f"Going to open issue with title {issue_data['title']} in {repository}") def main(): parser = argparse.ArgumentParser(description='Open Issue for every document.') parser.add_argument( 'token', metavar='token', help='API token') parser.add_argument( '--api-url', help='API base url of the Git hoster' ) parser.add_argument( '--environment', help='Environment for the repository' ) parser.add_argument( '--title', required=True, help='Issue title' ) parser.add_argument( '--body', required=True, help='Issue body' ) parser.add_argument( '--repo', help='Repository to report issue in (instead of doc repository).' ) parser.add_argument( '--assignee', help='Issue assignee to use instead of document service assignees.' ) parser.add_argument( '--labels', help='Issue labels to use (comma separated list of label IDs).' ) args = parser.parse_args() data = otc_metadata.services.Services() api_session.headers.update({'Authorization': f"token {args.token}"}) for doc in data.all_docs_full(environment=args.environment): issue_data=dict( title=args.title.format(**doc), body=args.body.format(**doc), repository=doc["repository"] ) if "assignees" in doc: issue_data["assignees"] = doc["assignees"] if args.assignee: issue_data["assignees"] = [args.assignee] if args.labels: issue_data["labels"] = [int(x) for x in args.labels.split(',')] open_issue(args, args.repo or doc["repository"], issue_data) if __name__ == '__main__': main()