Example #1
0
def main():
    token = os.getenv("GITHUB_TOKEN")
    if not token:
        print(
            "missing GITHUB_TOKEN please set environment variable with personal token "
            "https://github.com/settings/tokens")
        return
    g = Github(token)

    parser = argparse.ArgumentParser(
        description="Github statistics calculator",
        usage="main.py -s 16-Jul-2020 -e 20-Jul-2020")
    start_help = "The first day inclusive of analysis. " + \
                 "Default is 30 days ago. Must be in Y-m-d. ex: 16-Jul-2020"
    parser.add_argument(
        "-s",
        "--start",
        dest="start_date",
        type=lambda s: datetime.datetime.strptime(s, "%Y-%m-%d").date(),
        nargs=1,
        help=start_help,
        default=[
            (datetime.datetime.today() - datetime.timedelta(days=30)).date()
        ])
    end_help = "The last day inclusive of analysis. " + \
               "Default is today. Must be in Y-m-d. ex: 16-Jul-2020"
    parser.add_argument(
        "-e",
        "--end",
        dest="end_date",
        type=lambda s: datetime.datetime.strptime(s, "%Y-%m-%d").date(),
        nargs=1,
        help=end_help,
        default=[datetime.datetime.today().date()])

    parser.add_argument(
        "-r",
        "--repo_name",
        dest="repo_name",
        type=str,
        nargs=1,
        help=
        "Name of repo you would like to analyze. Default is tuesday-strategies",
        default=["tuesday-strategies"])

    parser.add_argument(
        "-d",
        "--delete_cache",
        action="count",
        default=0,
    )

    parser.add_argument("--verbose",
                        "-v",
                        action="count",
                        help="Shows urls to reviews, comments, and pr reviews",
                        default=0)

    args = parser.parse_args()
    name = args.repo_name[0]
    cache = Cache(name)
    start = args.start_date[0]
    end = args.end_date[0]
    verbose = args.verbose
    print("start: {}".format(start))
    print("end: {}".format(end))
    print("repo name: {}".format(name))
    repo = get_repo(g, name)
    cache.initialize_folder()
    if args.delete_cache:
        print("deleting cache")
        cache.delete_cache()
        return

    total_business_days = BusinessDayCalculator(start, end).business_days()
    prs, comments, reviews = GetPRInfo(repo, start, end, cache).get_pr_info()
    statistics = {}
    statistics = PRInfoProcessor(statistics, prs, total_business_days,
                                 verbose).process()
    statistics = CommentsInfoProcessor(statistics, comments,
                                       total_business_days, verbose).process()
    statistics = ReviewsInfoProcessor(statistics, reviews, total_business_days,
                                      verbose).process()
    for k in sorted(statistics.keys()):
        print(f"{k}: {statistics[k]}")
    print(f"Total business days {total_business_days}")