@@ -10,7 +10,7 @@ import subprocess
10
10
from importlib import import_module
11
11
from modelmaker import folders_in_folder
12
12
import shutil
13
- from jinja2 import Template
13
+ from jinja2 import Template , Environment , PackageLoader , FileSystemLoader
14
14
15
15
module_folder = os .path .dirname (sys .modules ['modelmaker' ].__file__ )
16
16
current_folder = os .path .abspath (os .curdir )
@@ -32,40 +32,43 @@ args = parser.parse_args()
32
32
############################################################################################
33
33
34
34
if args .subcommand == 'new' :
35
+
36
+ template = 'default'
37
+ template_folder = os .path .join (module_folder , 'resources' , 'templates' , template )
35
38
project_path = os .path .join (current_folder , args .name )
39
+
36
40
print (f"Creating project in { project_path } ..." )
37
41
38
42
# copy project template
39
43
shutil .copytree (
40
- os .path .join (module_folder , 'resources' , 'project_template' ),
41
- project_path
44
+ template_folder ,
45
+ project_path ,
46
+ ignore = shutil .ignore_patterns ('*.pyc' , '__pycache__' )
42
47
)
43
48
44
49
# rename package folder
45
50
os .rename (
46
51
os .path .join (project_path , 'package' ),
47
- os .path .join (project_path , args .name ),
52
+ os .path .join (project_path , args .name )
48
53
)
49
54
50
- # template setup.py
51
- setup_file = os .path .join (project_path , 'setup.py' )
52
- template = Template (open (setup_file ).read ())
53
- with open (setup_file , 'w' ) as f :
54
- print (f"Generating template { setup_file } ..." )
55
- f .write (template .render (package_name = args .name ))
55
+ env = Environment (
56
+ loader = FileSystemLoader (project_path )
57
+ )
56
58
57
- # template README.md
58
- readme_file = os .path .join (project_path , 'README.md' )
59
- template = Template (open (readme_file ).read ())
60
- with open (readme_file , 'w' ) as f :
61
- print (f"Generating template { readme_file } ..." )
62
- f .write (template .render (package_name = args .name ))
59
+ # replace template strings
60
+ for file in glob (os .path .join (project_path , '**/*' ), recursive = True ):
61
+ if os .path .isfile (file ):
62
+ template = env .get_template (os .path .relpath (file , start = project_path ))
63
+ with open (file , 'w' ) as f :
64
+ print (f"Generating template { file } ..." )
65
+ f .write (template .render (package_name = args .name ))
63
66
64
67
############################################################################################
65
68
## list templates
66
69
############################################################################################
67
70
68
- if args .subcommand == 'templates' :
71
+ elif args .subcommand == 'templates' :
69
72
print ("\n Templates available:" )
70
73
for t in templates :
71
74
print (f" { t } " )
0 commit comments