#!/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()