Reviewed-by: Goncharov, Artem <artem.goncharov@t-systems.com> Co-authored-by: gtema <artem.goncharov@gmail.com> Co-committed-by: gtema <artem.goncharov@gmail.com>
		
			
				
	
	
		
			74 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
#!/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()
 |