From 4128060396ac70705ec554bcb8ce5c5d11c8f1e9 Mon Sep 17 00:00:00 2001 From: Ahp06 Date: Wed, 23 Jan 2019 14:56:41 +0100 Subject: [PATCH 1/2] Added c_dir option for loading multiple configs from a directory --- sumo_project/config.py | 2 +- .../configs/{config2.json => config4.json} | 0 sumo_project/files/imgs/runner_help.PNG | Bin 25842 -> 29250 bytes sumo_project/runner.py | 28 +++++++++++++----- 4 files changed, 21 insertions(+), 9 deletions(-) rename sumo_project/files/configs/{config2.json => config4.json} (100%) diff --git a/sumo_project/config.py b/sumo_project/config.py index 17f6663..0454a26 100644 --- a/sumo_project/config.py +++ b/sumo_project/config.py @@ -42,7 +42,7 @@ class Config: :param config_file: The path to your configuration file :return: """ - with open(f'files/configs/{config_file}.json', 'r') as f: + with open(f'{config_file}.json', 'r') as f: data = json.load(f) for option in data: diff --git a/sumo_project/files/configs/config2.json b/sumo_project/files/configs/config4.json similarity index 100% rename from sumo_project/files/configs/config2.json rename to sumo_project/files/configs/config4.json diff --git a/sumo_project/files/imgs/runner_help.PNG b/sumo_project/files/imgs/runner_help.PNG index a876a59344450cec0be46fb6171be3d95d22375a..f3dea0b5df08a9cc3bf188d1d745f185795d7ddd 100644 GIT binary patch literal 29250 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 Mesl|W^ZBd)2e2`A`2YX_ literal 25842 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 diff --git a/sumo_project/runner.py b/sumo_project/runner.py index 256fedf..86a874f 100644 --- a/sumo_project/runner.py +++ b/sumo_project/runner.py @@ -204,6 +204,8 @@ def add_options(parser): help='Run a simulation process with the dump chosen') parser.add_argument("-c", "--c", metavar =('config1','config2'), nargs='+', type=str, help='Choose your(s) configuration file(s) from your working directory') + parser.add_argument("-c_dir", "--c_dir", type=str, + help='Choose a directory which contains your(s) configuration file(s)') parser.add_argument("-save", "--save", action="store_true", help='Save the logs into the logs folder') parser.add_argument("-csv", "--csv", action="store_true", @@ -230,17 +232,27 @@ def main(args): data = jsonpickle.decode(f.read()) process = [] + files = [] if args.c is not None: - for conf in args.c: # Initialize all process - - config = Config(conf,data) - p = RunProcess(data, config,args.save,args.csv) - process.append(p) - p.start() - - for p in process : p.join() + for config in args.c: + files.append(f'files/configs/{config}') + + if args.c_dir is not None: + path = f'files/configs/{args.c_dir}/' + bundle_files = [f for f in os.listdir(path) if os.path.isfile(os.path.join(path, f))] + for config in bundle_files: + conf_formatted = config.replace('.json','') + files.append(f'files/configs/{args.c_dir}/{conf_formatted}') + + for conf in files: # Initialize all process + + config = Config(conf,data) + p = RunProcess(data, config,args.save,args.csv) + process.append(p) + p.start() + for p in process : p.join() if __name__ == '__main__': main(sys.argv[1:]) From 54e9f0d4229370d46da0a31f623d839cd59e956d Mon Sep 17 00:00:00 2001 From: Ahp06 Date: Wed, 23 Jan 2019 17:01:42 +0100 Subject: [PATCH 2/2] Added command constraints --- sumo_project/runner.py | 86 +++++++++++++++++++++++++----------------- 1 file changed, 52 insertions(+), 34 deletions(-) diff --git a/sumo_project/runner.py b/sumo_project/runner.py index 86a874f..4195064 100644 --- a/sumo_project/runner.py +++ b/sumo_project/runner.py @@ -182,7 +182,7 @@ def create_dump(dump_name, simulation_dir, areas_number): print(f'Dump with name {dump_name} already exist') traci.close(False) - + def add_options(parser): """ Add command line options @@ -194,10 +194,10 @@ def add_options(parser): # Faire que -c soit requis si -run parser.add_argument("-new_dump", "--new_dump", type=str, - required=False, help='Load and create a new data dump with the configuration file chosen') - parser.add_argument("-areas", "--areas", type=int, required=False, + help='Load and create a new data dump with the configuration file chosen') + parser.add_argument("-areas", "--areas", type=int, help='Will create a grid with "areas x areas" areas') - parser.add_argument("-simulation_dir", "--simulation_dir", type=str, required=False, + parser.add_argument("-simulation_dir", "--simulation_dir", type=str, help='Choose the simulation directory') parser.add_argument("-run", "--run", type=str, @@ -211,6 +211,22 @@ def add_options(parser): parser.add_argument("-csv", "--csv", action="store_true", help="Export all data emissions into a CSV file") +def check_user_entry(args): + """ + Check the user entry consistency + """ + if (args.new_dump is not None): + if(args.areas is None or args.simulation_dir is None): + print('The -new_dump argument requires the -areas and -simulation_dir options') + return False + + if (args.run is not None): + if(args.c is None and args.c_dir is None): + print('The -run argument requires the -c or -c_dir') + return False + + return True + def main(args): """ The entry point of the application @@ -221,38 +237,40 @@ def main(args): add_options(parser) args = parser.parse_args(args) - if args.new_dump is not None: - if (args.simulation_dir is not None) and (args.areas is not None): - create_dump(args.new_dump, args.simulation_dir, args.areas) - - if args.run is not None: - dump_path = f'files/dump/{args.run}.json' - if os.path.isfile(dump_path): - with open(dump_path, 'r') as f: - data = jsonpickle.decode(f.read()) - - process = [] - files = [] - - if args.c is not None: - for config in args.c: - files.append(f'files/configs/{config}') - - if args.c_dir is not None: - path = f'files/configs/{args.c_dir}/' - bundle_files = [f for f in os.listdir(path) if os.path.isfile(os.path.join(path, f))] - for config in bundle_files: - conf_formatted = config.replace('.json','') - files.append(f'files/configs/{args.c_dir}/{conf_formatted}') + if(check_user_entry(args)): + + if args.new_dump is not None: + if (args.simulation_dir is not None) and (args.areas is not None): + create_dump(args.new_dump, args.simulation_dir, args.areas) + + if args.run is not None: + dump_path = f'files/dump/{args.run}.json' + if os.path.isfile(dump_path): + with open(dump_path, 'r') as f: + data = jsonpickle.decode(f.read()) - for conf in files: # Initialize all process - - config = Config(conf,data) - p = RunProcess(data, config,args.save,args.csv) - process.append(p) - p.start() + process = [] + files = [] + + if args.c is not None: + for config in args.c: + files.append(f'files/configs/{config}') + + if args.c_dir is not None: + path = f'files/configs/{args.c_dir}/' + bundle_files = [f for f in os.listdir(path) if os.path.isfile(os.path.join(path, f))] + for config in bundle_files: + conf_formatted = config.replace('.json','') + files.append(f'files/configs/{args.c_dir}/{conf_formatted}') - for p in process : p.join() + for conf in files: # Initialize all process + + config = Config(conf,data) + p = RunProcess(data, config,args.save,args.csv) + process.append(p) + p.start() + + for p in process : p.join() if __name__ == '__main__': main(sys.argv[1:])