2
2
import sys
3
3
import platform
4
4
import argparse
5
- # import shutil
6
- # from git import Repo
5
+ import re
7
6
8
7
9
8
class Helper :
@@ -25,13 +24,7 @@ def project_name(self):
25
24
def git_repo (self ):
26
25
return self ._git_repo
27
26
28
- # def clonerepo(self):
29
- # # Download MLOpsPython repo from git
30
- # Repo.clone_from(
31
- # self._git_repo, self._project_directory, branch="master", depth=1) # NOQA: E501
32
- # print(self._project_directory)
33
-
34
- def renamefiles (self ):
27
+ def rename_files (self ):
35
28
# Rename all files starting with diabetes_regression with project name
36
29
strtoreplace = "diabetes_regression"
37
30
dirs = [".pipelines" , r"ml_service/pipelines" ]
@@ -42,10 +35,11 @@ def renamefiles(self):
42
35
if (filename .find (strtoreplace ) != - 1 ):
43
36
src = os .path .join (self ._project_directory , normDir , filename ) # NOQA: E501
44
37
dst = os .path .join (self ._project_directory ,
45
- normDir , filename .replace (strtoreplace , self ._project_name , 1 )) # NOQA: E501
38
+ normDir ,
39
+ filename .replace (strtoreplace , self ._project_name , 1 )) # NOQA: E501
46
40
os .rename (src , dst )
47
41
48
- def renamedir (self ):
42
+ def rename_dir (self ):
49
43
dir = "diabetes_regression"
50
44
src = os .path .join (self ._project_directory , dir )
51
45
for path , subdirs , files in os .walk (src ):
@@ -57,39 +51,37 @@ def renamedir(self):
57
51
new_name = os .path .join (newPath , name )
58
52
os .rename (file_path , new_name )
59
53
60
- def deletedir (self ):
54
+ def delete_dir (self ):
61
55
# Delete unwanted directories
62
56
dirs = ["docs" , r"diabetes_regression" ]
63
57
if (platform .system () == "Windows" ):
64
58
cmd = 'rmdir /S /Q "{}"'
65
59
else :
66
60
cmd = 'rm -r "{}"'
67
61
for dir in dirs :
68
- os .system (
69
- cmd .format (os .path .join (self ._project_directory , os .path .normpath (dir )))) # NOQA: E501
62
+ os .system (cmd .format (os .path .join (self ._project_directory , os .path .normpath (dir )))) # NOQA: E501
70
63
71
- def cleandir (self ):
64
+ def clean_dir (self ):
72
65
# Clean up directories
73
66
dirs = ["data" , "experimentation" ]
74
67
for dir in dirs :
75
68
for root , dirs , files in os .walk (os .path .join (self ._project_directory , dir )): # NOQA: E501
76
69
for file in files :
77
70
os .remove (os .path .join (root , file ))
78
71
79
- def validateargs (self ):
72
+ def validate_args (self ):
80
73
# Validate arguments
81
74
if (os .path .isdir (self ._project_directory ) is False ):
82
- raise Exception (
83
- "Not a valid directory. Please provide absolute directory path" ) # NOQA: E501
84
- # if (len(os.listdir(self._project_directory)) > 0):
85
- # raise Exception("Directory not empty. PLease empty directory")
86
- if (len (self ._project_name ) < 3 or len (self ._project_name ) > 15 ):
87
- raise Exception ("Project name should be 3 to 15 chars long" )
75
+ raise Exception ("Not a valid directory. Please provide an absolute directory path." ) # NOQA: E501
76
+ if (len (self ._project_name ) < 3 or len (self ._project_name ) > 15 ):
77
+ raise Exception ("Invalid project name length. Project name should be 3 to 15 chars long, letters and underscores only." ) # NOQA: E501
78
+ if (not re .search ("^[\\ w_]+$" , self ._project_name )):
79
+ raise Exception ("Invalid characters in project name. Project name should be 3 to 15 chars long, letters and underscores only." ) # NOQA: E501
88
80
89
81
90
- def replaceprojectname (project_dir , project_name , rename_name ):
82
+ def replace_project_name (project_dir , project_name , rename_name ):
91
83
# Replace instances of rename_name within files with project_name
92
- dirs = [r".env.example" ,
84
+ files = [r".env.example" ,
93
85
r".pipelines/code-quality-template.yml" ,
94
86
r".pipelines/pr.yml" ,
95
87
r".pipelines/diabetes_regression-ci.yml" ,
@@ -107,42 +99,52 @@ def replaceprojectname(project_dir, project_name, rename_name):
107
99
r"diabetes_regression/conda_dependencies.yml" ,
108
100
r"diabetes_regression/evaluate/evaluate_model.py" ,
109
101
r"diabetes_regression/register/register_model.py" ,
110
- r"diabetes_regression/training/test_train.py" ] # NOQA: E501
102
+ r"diabetes_regression/training/test_train.py" ]
111
103
112
- for dir in dirs :
113
- file = os .path .join (project_dir , os .path .normpath (dir ))
114
- fin = open (file ,
115
- "rt" , encoding = "utf8" )
116
- data = fin .read ()
117
- data = data .replace (rename_name , project_name )
118
- fin .close ()
119
- fin = open (os .path .join (project_dir , file ), "wt" , encoding = "utf8" ) # NOQA: E501
120
- fin .write (data )
121
- fin .close ()
104
+ for file in files :
105
+ path = os .path .join (project_dir , os .path .normpath (file ))
106
+ try :
107
+ with open (path , "rt" , encoding = "utf8" ) as f_in :
108
+ data = f_in .read ()
109
+ data = data .replace (rename_name , project_name )
110
+ with open (os .path .join (project_dir , file ), "wt" , encoding = "utf8" ) as f_out : # NOQA: E501
111
+ f_out .write (data )
112
+ except IOError as e :
113
+ print ("Could not modify \" %s\" . Is the MLOpsPython repo already cloned at \" %s\" ?" % (path , project_dir )) # NOQA: E501
114
+ raise e
122
115
123
116
124
117
def main (args ):
125
118
parser = argparse .ArgumentParser (description = 'New Template' )
126
- parser .add_argument ("--d" , type = str ,
119
+ parser .add_argument ("-d" ,
120
+ "--directory" ,
121
+ type = str ,
122
+ required = True ,
127
123
help = "Absolute path to new project direcory" )
128
- parser .add_argument (
129
- "--n" , type = str , help = "Name of the project[3-15 chars] " )
124
+ parser .add_argument ("-n" ,
125
+ "--name" ,
126
+ type = str ,
127
+ required = True ,
128
+ help = "Name of the project [3-15 chars, letters and underscores only]" ) # NOQA: E501
130
129
try :
131
130
args = parser .parse_args ()
132
- project_directory = args .d
133
- project_name = args .n
131
+
132
+ project_directory = args .directory
133
+ project_name = args .name
134
+
134
135
helper = Helper (project_directory , project_name )
135
- helper .validateargs ()
136
- # helper.clonerepo ()
137
- helper . cleandir ()
138
- replaceprojectname (project_directory , project_name ,
139
- "diabetes_regression " )
140
- replaceprojectname ( project_directory , project_name , "diabetes" )
141
- helper .renamefiles ()
142
- helper .renamedir ()
143
- helper .deletedir ()
136
+ helper .validate_args ()
137
+ helper .clean_dir ()
138
+
139
+ replace_project_name (project_directory , project_name , "diabetes_regression" ) # NOQA: E501
140
+ replace_project_name ( project_directory , project_name , "diabetes " )
141
+
142
+ helper .rename_files ()
143
+ helper .rename_dir ()
144
+ helper .delete_dir ()
144
145
except Exception as e :
145
146
print (e )
147
+
146
148
return 0
147
149
148
150
0 commit comments