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