Skip to content

Commit e9c4806

Browse files
committed
bootstrap
1 parent fb1d951 commit e9c4806

File tree

2 files changed

+121
-0
lines changed

2 files changed

+121
-0
lines changed

bootstrap/bootstrap.py

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
import os
2+
import sys
3+
import argparse
4+
from git import Repo
5+
6+
7+
class Helper:
8+
9+
def __init__(self, project_directory, project_name):
10+
self._project_directory = project_directory
11+
self._project_name = project_name
12+
self._git_repo = "https://github.com/microsoft/MLOpsPython.git"
13+
14+
@property
15+
def project_directory(self):
16+
return self._project_directory
17+
18+
@property
19+
def project_name(self):
20+
return self._project_name
21+
22+
@property
23+
def git_repo(self):
24+
return self._git_repo
25+
26+
def clonerepo(self):
27+
# Download MLOpsPython repo from git
28+
Repo.clone_from(
29+
self._git_repo, self._project_directory, branch="master", depth=1)
30+
print(self._project_directory)
31+
32+
def renamefiles(self):
33+
# Rename all files starting with diabetes_regression with project name
34+
strtoreplace = "diabetes_regression"
35+
dirs = [".pipelines", "ml_service\pipelines"]
36+
for dir in dirs:
37+
dirpath = os.path.join(self._project_directory, dir)
38+
for filename in os.listdir(dirpath):
39+
if(filename.find(strtoreplace) != -1):
40+
src = os.path.join(self._project_directory, dir, filename)
41+
dst = os.path.join(self._project_directory,
42+
dir, filename.replace(strtoreplace, self._project_name, 1))
43+
os.rename(src, dst)
44+
45+
def renamedir(self):
46+
# Rename any directory with diabetes_regression with project name
47+
dirs = ["diabetes_regression"]
48+
for dir in dirs:
49+
src = os.path.join(self._project_directory, dir)
50+
dst = os.path.join(self._project_directory, self._project_name)
51+
os.rename(src, dst)
52+
53+
def deletedir(self):
54+
# Delete unwanted directories
55+
dirs = [".git", "docs", r"diabetes_regression\training\R"]
56+
for dir in dirs:
57+
os.system(
58+
'rmdir /S /Q "{}"'.format(os.path.join(self._project_directory, dir)))
59+
60+
def replaceimport(self):
61+
# Replace imports with new project name
62+
dirs = [r"tests\unit\code_test.py",
63+
r"ml_service\pipelines\diabetes_regression_verify_train_pipeline.py"]
64+
for file in dirs:
65+
fin = open(os.path.join(self._project_directory, file), "rt")
66+
data = fin.read()
67+
newimport = "from " + self._project_name + "."
68+
data = data.replace("from diabetes_regression.", newimport)
69+
fin.close()
70+
fin = open(os.path.join(self._project_directory, file), "wt")
71+
fin.write(data)
72+
fin.close()
73+
74+
def cleandir(self):
75+
# Clean up directories
76+
dirs = ["data", "experimentation"]
77+
for dir in dirs:
78+
for root, dirs, files in os.walk(os.path.join(self._project_directory, dir)):
79+
for file in files:
80+
os.remove(os.path.join(root, file))
81+
82+
def validateargs(self):
83+
# Validate arguments
84+
if (path.isdir(self._project_directory) is False):
85+
raise Exception(
86+
"Not a valid directory. Please provide absolute directory path")
87+
if (len(os.listdir(self._project_directory)) > 0):
88+
raise Exception("Directory not empty. PLease empty directory")
89+
if(len(self._project_name) < 3 or len(self._project_name) > 8):
90+
raise Exception("Project name should be 3 to 8 chars long")
91+
92+
93+
def main(args):
94+
# Run this script to create a template from mlopspython
95+
# python bootstrap.py --d [dirpath] --n test
96+
parser = argparse.ArgumentParser(description='New Template')
97+
parser.add_argument("--d", type=str,
98+
help="Absolute path to new project direcory")
99+
parser.add_argument(
100+
"--n", type=str, help="Name of the project[3-8 chars] ")
101+
try:
102+
args = parser.parse_args()
103+
project_directory = args.d
104+
project_name = args.n
105+
helper = Helper(project_directory, project_name)
106+
helper.validateargs()
107+
helper.clonerepo()
108+
helper.cleandir()
109+
helper.replaceimport()
110+
helper.deletedir()
111+
helper.renamefiles()
112+
helper.renamedir()
113+
except Exception as e:
114+
print(e)
115+
return 0
116+
117+
118+
if '__main__' == __name__:
119+
sys.exit(main(sys.argv))

diabetes_regression/ci_dependencies.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,5 @@ dependencies:
2626
- flake8_formatter_junit_xml==0.0.6
2727
- azure-cli==2.0.81
2828
- tox==3.14.3
29+
# Uncomment for bootstrap.py
30+
#- GitPython==3.0.5

0 commit comments

Comments
 (0)