1#!/usr/bin/env python3 2 3# Copyright (c) 2022 Nordic Semiconductor ASA 4# 5# SPDX-License-Identifier: Apache-2.0 6 7# stdlib 8import argparse 9import pickle 10import sys 11from pathlib import Path 12from typing import BinaryIO, List 13 14# third party 15from github.Issue import Issue 16 17# other zephyr/scripts modules 18from github_helpers import get_github_object 19 20# Note that type annotations are not currently statically checked, and 21# should only be considered documentation. 22 23def parse_args() -> argparse.Namespace: 24 '''Parse command line arguments.''' 25 parser = argparse.ArgumentParser( 26 description=''' 27A helper script which loads all open bugs in the 28zephyrproject-rtos/zephyr repository using the GitHub API, and writes 29them to a new pickle file as a list of github.Issue.Issue objects. 30 31For more information, see: 32 33 - GitHub API: https://docs.github.com/en/rest 34 - github.Issue.Issue: 35 https://pygithub.readthedocs.io/en/latest/github_objects/Issue.html 36 - pickle: https://docs.python.org/3/library/pickle.html 37''', 38 formatter_class=argparse.RawDescriptionHelpFormatter, allow_abbrev=False) 39 parser.add_argument('out_file', metavar='OUTFILE', type=Path, nargs='?', 40 help='''file to write pickle data to (default: 41 stdout)''') 42 return parser.parse_args() 43 44def get_open_bugs() -> List[Issue]: 45 zephyr_repo = get_github_object().get_repo('zephyrproject-rtos/zephyr') 46 return list(zephyr_repo.get_issues(state='open', labels=['bug'])) 47 48def open_out_file(args: argparse.Namespace) -> BinaryIO: 49 if args.out_file is None: 50 return open(sys.stdout.fileno(), 'wb', closefd=False) 51 52 return open(args.out_file, 'wb') 53 54def main() -> None: 55 args = parse_args() 56 open_bugs = [issue for issue in get_open_bugs() if not issue.pull_request] 57 58 with open_out_file(args) as out_file: 59 pickle.dump(open_bugs, out_file) 60 61if __name__ == '__main__': 62 main() 63