6
6
import logging
7
7
import toml
8
8
9
+ from pathlib import Path
10
+
9
11
10
12
class SetupModel :
11
13
"""
@@ -16,7 +18,8 @@ class SetupModel:
16
18
17
19
def __init__ (self , config_file ):
18
20
self .config_file = config_file
19
- # self.logger = logger
21
+ self .configs = Config (dict ())
22
+ self .model_dir = Path ()
20
23
21
24
def _setup_logging (self , log_file ):
22
25
logging .basicConfig (
@@ -46,11 +49,17 @@ def run_setup(self):
46
49
# Validate configs
47
50
configs .validate ()
48
51
52
+ self .configs = configs
53
+
49
54
# Create model directory
50
55
model_dir = os .path .join (configs .ROOT_DIR , configs .MODEL_FOLDER_NAME )
51
56
model_dir = model_dir .replace ("\\ " , "/" )
52
- # TODO: what to do if the directory already exists?
53
- os .mkdir (model_dir )
57
+ self .model_dir = Path (model_dir )
58
+ # if the directory already exists - error and quit
59
+ if self .model_dir .exists ():
60
+ raise Exception (f"{ self .model_dir } already exist! Setup terminated." )
61
+ else :
62
+ os .mkdir (model_dir )
54
63
55
64
# Initialize logging
56
65
log_file = os .path .join (model_dir , "setup_log.log" )
@@ -138,11 +147,37 @@ def run_setup(self):
138
147
os .path .join (model_dir , "CTRAMP" , "model" ),
139
148
)
140
149
150
+ self ._create_run_model_batch (logger )
151
+
141
152
logger .info (f"Setup process completed successfully!" )
142
153
143
154
# Close logging
144
155
logging .shutdown ()
145
156
157
+
158
+ def _create_run_model_batch (self , logger ):
159
+ """
160
+ Creates the RunModel.bat and RunModel.py in the root directory
161
+
162
+ Args:
163
+ logger: logger
164
+ """
165
+
166
+ if not self .model_dir .exists ():
167
+ logger .error (f"Directory { self .model_dir } does not exists." )
168
+ raise FileNotFoundError (f"Directory { self .model_dir } does not exists." )
169
+
170
+ # create RunModel.bat
171
+ with open (self .model_dir / 'RunModel.bat' , 'w' ) as file :
172
+ logger .info (f"Creating RunModel.bat in directory { self .model_dir } " )
173
+ file .write (_RUN_MODEL_BAT_CONTENT )
174
+
175
+ # create RunModel.py
176
+ with open (self .model_dir / 'RunModel.py' , 'w' ) as file :
177
+ logger .info (f"Creating RunModel.py in directory { self .model_dir } " )
178
+ file .write (_RUN_MODEL_PY_CONTENT )
179
+
180
+
146
181
def _create_folder_structure (self , folder_names , root_dir , logger ):
147
182
"""
148
183
Creates empty folder structure in the root directory
@@ -399,3 +434,34 @@ def validate(self):
399
434
for attr in required_attrs :
400
435
if not getattr (self , attr , None ):
401
436
raise ValueError (f"{ attr } is required in the setup configuration!" )
437
+
438
+ _RUN_MODEL_BAT_CONTENT = """
439
+ :: the directory that this file is in
440
+ SET MODEL_RUN_DIR=%~p0
441
+ cd /d %MODEL_RUN_DIR%
442
+
443
+ SET EMMEPATH=C:\Program Files\INRO\Emme\Emme 4\Emme-4.7.0.11
444
+ SET PATH=%EMMEPATH%\programs;%PATH%
445
+
446
+ CALL "C:\ProgramData\Anaconda3\condabin\conda" activate tm2py
447
+ python RunModel.py
448
+
449
+ CALL "C:\ProgramData\Anaconda3\condabin\conda" deactivate
450
+ PAUSE
451
+ """
452
+
453
+ _RUN_MODEL_PY_CONTENT = """
454
+ import os
455
+ import gdal
456
+ from tm2py.controller import RunController
457
+
458
+ controller = RunController(
459
+ [
460
+ os.path.join(os.getcwd(), "scenario_config.toml"),
461
+ os.path.join(os.getcwd(), "model_config.toml")
462
+ ],
463
+ run_dir = os.getcwd()
464
+ )
465
+
466
+ controller.run()
467
+ """
0 commit comments