Skip to content

Commit 37ee58f

Browse files
committed
Adding python-create-many-repos-connection-reuse-pool.py
1 parent 82da191 commit 37ee58f

File tree

1 file changed

+99
-0
lines changed

1 file changed

+99
-0
lines changed
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
import sys
2+
import json
3+
import logging
4+
import time
5+
import concurrent.futures
6+
import urllib3
7+
import argparse
8+
import thepower
9+
from pathlib import Path
10+
from datetime import datetime
11+
12+
def make_request(i, args, http, token):
13+
headers = {
14+
"Authorization" : token,
15+
"Accept" : "application/vnd.github.v3+json",
16+
"User-Agent" : f"pwr-repo-creator-{i}"
17+
}
18+
19+
repo_name = f"""{args.repo_prefix}-{i:07}"""
20+
21+
params = {
22+
"name": repo_name,
23+
"description": f"this is a repo: {i}",
24+
"private": True
25+
}
26+
params = json.dumps(params)
27+
url = f"""{args.url}/orgs/{args.org}/repos"""
28+
29+
try:
30+
response = http.request('POST', url, body=params, headers=headers)
31+
except Exception as e:
32+
print(f"Error creating repo {repo_name}: {e}", file=sys.stderr)
33+
34+
35+
def main(args):
36+
loglevel = "INFO"
37+
logging.basicConfig(level=loglevel)
38+
logger = logging.getLogger(__name__)
39+
40+
power_config = thepower.read_dotcom_config(args.power_config)
41+
args.url = power_config.get('dummy_section','GITHUB_API_BASE_URL')
42+
args.hostname = power_config.get('dummy_section','hostname')
43+
args.path_prefix = power_config.get('dummy_section','path_prefix')
44+
args.GITHUB_TOKEN = power_config.get('dummy_section','GITHUB_TOKEN')
45+
46+
if args.number_of_repos is False:
47+
args.number_of_repos = int(power_config.get('dummy_section','number_of_repos'))
48+
49+
if args.org is False:
50+
args.org = power_config.get('dummy_section','org').strip('"')
51+
52+
logger.info(f"""creating: {args.number_of_repos} repos""")
53+
logger.info(f"""on host: {args.hostname}""")
54+
logger.info(f"""on org: {args.org}""")
55+
56+
57+
token = f"Bearer {args.GITHUB_TOKEN}"
58+
http = urllib3.PoolManager(num_pools=12)
59+
ts = time.time()
60+
start = datetime.now()
61+
62+
with concurrent.futures.ThreadPoolExecutor(max_workers=12) as executor:
63+
executor.map(lambda x: make_request(x, args, http, token), range(args.number_of_repos))
64+
65+
end = datetime.now()
66+
elapsed = end - start
67+
print(f"""elapsed time: {elapsed} to create {args.number_of_repos} repos""", file=sys.stderr)
68+
69+
70+
if __name__ == "__main__":
71+
parser = argparse.ArgumentParser()
72+
parser.add_argument("-c", "--power-config", action="store", dest="power_config", default=".gh-api-examples.conf", help="This is the config file to use to access variables for the power.")
73+
parser.add_argument("-e", "--extension", action="store", dest="extension", default="c")
74+
75+
parser.add_argument(
76+
"--repos",
77+
action="store",
78+
dest="number_of_repos",
79+
default=False,
80+
help="The number of repos to create.",
81+
)
82+
parser.add_argument(
83+
"--prefix",
84+
action="store",
85+
dest="repo_prefix",
86+
default=False,
87+
help="the prefix for the repo name.",
88+
)
89+
parser.add_argument(
90+
"--org",
91+
action="store",
92+
dest="org",
93+
default=False,
94+
help="the organization name."
95+
)
96+
97+
args = parser.parse_args()
98+
99+
main(args)

0 commit comments

Comments
 (0)