3030import pyneuroml .utils .simdata as pynmls
3131from pyneuroml import DEFAULTS , __version__
3232from pyneuroml .errors import UNKNOWN_ERR
33+ from pyneuroml .utils .misc import chdir
3334
3435logger = logging .getLogger (__name__ )
3536logger .setLevel (logging .INFO )
@@ -1209,7 +1210,6 @@ def generate_sim_scripts_in_folder(
12091210 if root_dir is None :
12101211 root_dir = "."
12111212
1212- cwd = Path .cwd ()
12131213 tdir = pyneuroml .utils .get_pyneuroml_tempdir (rootdir = run_dir , prefix = "pyneuroml" )
12141214 os .mkdir (tdir )
12151215
@@ -1220,94 +1220,89 @@ def generate_sim_scripts_in_folder(
12201220
12211221 # change to root_dir, so that we're in the directory where the lems file
12221222 # is
1223- os .chdir (root_dir )
1224-
1225- logger .debug ("Getting list of model files" )
1226- model_file_list = [] # type: list
1227- lems_def_dir = None
1228- lems_def_dir = pyneuroml .utils .get_model_file_list (
1229- lems_file_name , model_file_list , root_dir , lems_def_dir
1230- )
1231-
1232- logger .debug (f"Model file list is { model_file_list } " )
1233-
1234- for model_file in model_file_list :
1235- logger .debug (f"Copying: { model_file } -> { tdir } /{ model_file } " )
1236- # if model file has directory structures in it, recreate the dirs in
1237- # the temporary directory
1238- if len (model_file .split ("/" )) > 1 :
1239- # throw error if files in parent directories are referred to
1240- if "../" in model_file :
1241- raise ValueError (
1242- """
1243- Cannot handle parent directories because we
1244- cannot create these directories correctly in
1245- the temporary location. Please re-organize
1246- your code such that all included files are in
1247- sub-directories of the root directory where the
1248- main file resides.
1249- """
1250- )
1251-
1252- model_file_path = pathlib .Path (tdir + "/" + model_file )
1253- parent = model_file_path .parent
1254- parent .mkdir (parents = True , exist_ok = True )
1255- shutil .copy (model_file , tdir + "/" + model_file )
1256-
1257- if lems_def_dir is not None :
1258- logger .info (f"Removing LEMS definitions directory { lems_def_dir } " )
1259- shutil .rmtree (lems_def_dir )
1260-
1261- os .chdir (tdir )
1262- logger .info (f"Working in { tdir } " )
1263- start_time = time .time () - 1.0
1264-
1265- if engine == "jneuroml_neuron" :
1266- run_lems_with (
1267- engine ,
1268- lems_file_name = Path (lems_file_name ).name ,
1269- compile_mods = False ,
1270- only_generate_scripts = True ,
1271- * engine_args ,
1272- ** engine_kwargs ,
1273- )
1274- elif engine == "jneuroml_netpyne" :
1275- run_lems_with (
1276- engine ,
1277- lems_file_name = Path (lems_file_name ).name ,
1278- only_generate_scripts = True ,
1279- * engine_args ,
1280- ** engine_kwargs ,
1223+ with chdir (root_dir ):
1224+ logger .debug ("Getting list of model files" )
1225+ model_file_list = [] # type: list
1226+ lems_def_dir = None
1227+ lems_def_dir = pyneuroml .utils .get_model_file_list (
1228+ lems_file_name , model_file_list , root_dir , lems_def_dir
12811229 )
12821230
1283- generated_files = pyneuroml .utils .get_files_generated_after (
1284- start_time , ignore_suffixes = ["xml" , "nml" ]
1285- )
1231+ logger .debug (f"Model file list is { model_file_list } " )
1232+
1233+ for model_file in model_file_list :
1234+ logger .debug (f"Copying: { model_file } -> { tdir } /{ model_file } " )
1235+ # if model file has directory structures in it, recreate the dirs in
1236+ # the temporary directory
1237+ if len (model_file .split ("/" )) > 1 :
1238+ # throw error if files in parent directories are referred to
1239+ if "../" in model_file :
1240+ raise ValueError (
1241+ """
1242+ Cannot handle parent directories because we
1243+ cannot create these directories correctly in
1244+ the temporary location. Please re-organize
1245+ your code such that all included files are in
1246+ sub-directories of the root directory where the
1247+ main file resides.
1248+ """
1249+ )
1250+
1251+ model_file_path = pathlib .Path (tdir + "/" + model_file )
1252+ parent = model_file_path .parent
1253+ parent .mkdir (parents = True , exist_ok = True )
1254+ shutil .copy (model_file , tdir + "/" + model_file )
1255+
1256+ if lems_def_dir is not None :
1257+ logger .info (f"Removing LEMS definitions directory { lems_def_dir } " )
1258+ shutil .rmtree (lems_def_dir )
1259+
1260+ with chdir (tdir ):
1261+ logger .info (f"Working in { tdir } " )
1262+ start_time = time .time () - 1.0
1263+
1264+ if engine == "jneuroml_neuron" :
1265+ run_lems_with (
1266+ engine ,
1267+ lems_file_name = Path (lems_file_name ).name ,
1268+ compile_mods = False ,
1269+ only_generate_scripts = True ,
1270+ * engine_args ,
1271+ ** engine_kwargs ,
1272+ )
1273+ elif engine == "jneuroml_netpyne" :
1274+ run_lems_with (
1275+ engine ,
1276+ lems_file_name = Path (lems_file_name ).name ,
1277+ only_generate_scripts = True ,
1278+ * engine_args ,
1279+ ** engine_kwargs ,
1280+ )
12861281
1287- # For NetPyNE, the channels are converted to NEURON mod files, but the
1288- # network and cells are imported from the nml files.
1289- # So we include all the model files too.
1290- if engine == "jneuroml_netpyne" :
1291- generated_files .extend (model_file_list )
1282+ generated_files = pyneuroml .utils .get_files_generated_after (
1283+ start_time , ignore_suffixes = ["xml" , "nml" ]
1284+ )
12921285
1293- logger .debug (f"Generated files are: { generated_files } " )
1286+ # For NetPyNE, the channels are converted to NEURON mod files, but the
1287+ # network and cells are imported from the nml files.
1288+ # So we include all the model files too.
1289+ if engine == "jneuroml_netpyne" :
1290+ generated_files .extend (model_file_list )
12941291
1295- if generated_files_dir_name is None :
1296- generated_files_dir_name = Path (tdir ).name + "_generated"
1297- logger .debug (
1298- f"Creating directory and moving generated files to it: { generated_files_dir_name } "
1299- )
1292+ logger .debug (f"Generated files are: { generated_files } " )
13001293
1301- for f in generated_files :
1302- fpath = pathlib .Path (f )
1303- moved_path = generated_files_dir_name / fpath
1304- # use os.renames because pathlib.Path.rename does not move
1305- # recursively and so cannot move files within directories
1306- os .renames (fpath , moved_path )
1294+ if generated_files_dir_name is None :
1295+ generated_files_dir_name = Path (tdir ).name + "_generated"
1296+ logger .debug (
1297+ f"Creating directory and moving generated files to it: { generated_files_dir_name } "
1298+ )
13071299
1308- # return to original directory
1309- # doesn't affect scripts much, but does affect our tests
1310- os .chdir (str (cwd ))
1300+ for f in generated_files :
1301+ fpath = pathlib .Path (f )
1302+ moved_path = generated_files_dir_name / fpath
1303+ # use os.renames because pathlib.Path.rename does not move
1304+ # recursively and so cannot move files within directories
1305+ os .renames (fpath , moved_path )
13111306
13121307 return tdir
13131308
0 commit comments