-
Notifications
You must be signed in to change notification settings - Fork 0
/
pre_gen_project.py
111 lines (89 loc) · 4 KB
/
pre_gen_project.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
import re
import sys
COOKIE_INPUTS = {
"project_name": {
"user_input": "{{cookiecutter.project_name}}",
"regex": r"^[a-zA-Z_]+(?:_? [a-zA-Z0-9]+)*$"},
"description": {
"user_input": "{{cookiecutter.description}}"},
"repo_name": {
"user_input": "{{cookiecutter.repo_name}}",
"regex": r"^[a-z][a-z0-9-]+$"},
"src_package_name": {
"user_input": "{{cookiecutter.src_package_name}}",
"regex": r"^[a-z](?:_?[a-z0-9]+)*$"},
"src_package_name_short": {
"user_input": "{{cookiecutter.src_package_name_short}}",
"regex": r"^[a-z](?:_?[a-z0-9]+)*$"},
"platform": {
"user_input": "{{cookiecutter.platform}}",
"avail": ["onprem", "gcp"]},
"orchestrator": {
"user_input": "{{cookiecutter.orchestrator}}",
"avail": ["runai"]},
"registry_project_path": {
"user_input": "{{cookiecutter.registry_project_path}}",
"regex": r"^(https?:\/\/)?([a-zA-Z0-9.-]+(:[a-zA-Z0-9.-]+)?@)?([a-zA-Z0-9.-]+)(:[0-9]+)?\/([a-zA-Z0-9._-]+\/)*([a-zA-Z0-9._-]+)(:[a-zA-Z0-9._-]+)?$"},
"problem_template": {
"user_input": "{{cookiecutter.problem_template}}",
"avail": ["base", "cv"]},
"author_name": {
"user_input": "{{cookiecutter.author_name}}",
"regex": r"^[a-zA-Z](?:_?[a-zA-Z0-9]+)*$"}
}
ERROR_MSG_LIST = []
def check_input_length(
cookie_input_key: str,
cookie_input_val: str
) -> None:
global ERROR_MSG_LIST
input_val = cookie_input_val["user_input"].strip()
if len(input_val) not in range(1, 73):
ERROR_MSG_LIST.append("ERROR: %s - '%s' is not of valid length (1 to 72)."
% (cookie_input_key, cookie_input_val["user_input"]))
def check_input_regex(
cookie_input_key: str,
cookie_input_val: str
) -> None:
global ERROR_MSG_LIST
if not re.match(cookie_input_val["regex"], cookie_input_val["user_input"]):
match cookie_input_key:
case "project_name":
ERROR_MSG_LIST.append("ERROR: %s - '%s' is not a valid project name. Please use only alphanumeric characters."
% (cookie_input_key, cookie_input_val["user_input"]))
case "repo_name":
ERROR_MSG_LIST.append("ERROR: %s - '%s' is not a valid repository name. Only alphanumeric characters and hyphens are permitted."
% (cookie_input_key, cookie_input_val["user_input"]))
case "src_package_name" | "src_package_name_short":
ERROR_MSG_LIST.append("ERROR: %s - '%s' is not a valid Python package name."
% (cookie_input_key, cookie_input_val["user_input"]))
case "registry_project_path":
ERROR_MSG_LIST.append("ERROR: %s - '%s' is not a valid container registry path."
% (cookie_input_key, cookie_input_val["user_input"]))
case "author_name":
ERROR_MSG_LIST.append("ERROR: %s - '%s' is not a valid name."
% (cookie_input_key, cookie_input_val["user_input"]))
def check_not_implemented(
cookie_input_key: str,
cookie_input_val: str
) -> None:
global ERROR_MSG_LIST
if cookie_input_val["user_input"] not in cookie_input_val["avail"]:
ERROR_MSG_LIST.append("ERROR: %s - '%s' has not been implemented."
% (cookie_input_key, cookie_input_val["user_input"]))
def check_cookiecutter_inputs() -> None:
global COOKIE_INPUTS
global ERROR_MSG_LIST
for cookie_input_key, cookie_input_val in COOKIE_INPUTS.items():
if cookie_input_key != 'registry_project_path':
check_input_length(cookie_input_key, cookie_input_val)
if "regex" in cookie_input_val:
check_input_regex(cookie_input_key, cookie_input_val)
if "avail" in cookie_input_val:
check_not_implemented(cookie_input_key, cookie_input_val)
if len(ERROR_MSG_LIST) > 0:
for error_msg in ERROR_MSG_LIST:
print(error_msg)
sys.exit(1)
if __name__ == "__main__":
check_cookiecutter_inputs()