78 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			78 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()
 |