From db72a624e1135f59a5421762f06f65c9b1aab8d7 Mon Sep 17 00:00:00 2001 From: Jonathan LEGRAND Date: Thu, 9 Apr 2026 00:13:51 +0200 Subject: [PATCH 01/12] Fix consistent wording for association phrase - Replaced "associated to" with "associated with" across multiple files for consistent phrasing. --- src/romitask/cli/print_task_info.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/romitask/cli/print_task_info.py b/src/romitask/cli/print_task_info.py index 65d9d1f..6af0f3c 100644 --- a/src/romitask/cli/print_task_info.py +++ b/src/romitask/cli/print_task_info.py @@ -288,14 +288,14 @@ def main(): md_path = os.path.join(args.db_path, 'metadata') json_list = [f for f in os.listdir(md_path) if f.startswith(args.task) and f.endswith('.json')] if json_list == []: - raise IOError("Could not find the JSON metadata file associated to task '{}' in dataset '{}'!".format(args.task, + raise IOError("Could not find the JSON metadata file associated with task '{}' in dataset '{}'!".format(args.task, args.db_path)) elif len(json_list) == 1: md_json = json_list[0] - print("Found a JSON metadata file associated to task '{}' in dataset '{}'!".format(args.task, args.db_path)) + print("Found a JSON metadata file associated with task '{}' in dataset '{}'!".format(args.task, args.db_path)) md_json = os.path.join(md_path, md_json) else: - print("Found more than one JSON metadata file associated to task '{}' in dataset '{}':".format(args.task, + print("Found more than one JSON metadata file associated with task '{}' in dataset '{}':".format(args.task, args.db_path)) [print(" - {}".format(json_f)) for json_f in json_list] md_json = max([os.path.join(md_path, json_f) for json_f in json_list], key=os.path.getctime) From 8041d817b7d792df76fcb01439c2a25b4ebf77c0 Mon Sep 17 00:00:00 2001 From: Jonathan LEGRAND Date: Thu, 9 Apr 2026 11:44:56 +0200 Subject: [PATCH 02/12] Replace `dummy_db` import path from `plantdb.commons.fsdb` to `plantdb.commons.test_database` --- src/romitask/task.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/romitask/task.py b/src/romitask/task.py index 890df48..6520a63 100644 --- a/src/romitask/task.py +++ b/src/romitask/task.py @@ -234,7 +234,7 @@ class FSDBConfiguration(luigi.Config): Examples -------- >>> from romitask.task import FSDBConfiguration - >>> from plantdb.commons.fsdb import dummy_db + >>> from plantdb.commons.test_database import dummy_db >>> # - First, let's create a dummy FSDB database to play with: >>> db = dummy_db() >>> db.connect() @@ -256,7 +256,7 @@ class ScanConfiguration(luigi.Config): Examples -------- >>> from romitask.task import ScanConfiguration - >>> from plantdb.commons.fsdb import dummy_db + >>> from plantdb.commons.test_database import dummy_db >>> # - First, let's create a dummy FSDB database to play with: >>> db = dummy_db() >>> db.connect() @@ -292,7 +292,7 @@ class FilesetTarget(luigi.Target): -------- >>> from romitask.task import FilesetTarget >>> from plantdb.commons.fsdb import FSDB - >>> from plantdb.commons.fsdb import dummy_db + >>> from plantdb.commons.test_database import dummy_db >>> # - First, let's create a dummy FSDB database to play with: >>> db = dummy_db() >>> db.connect() From 38df6d27e63c5df84257bbab8f71ff5944ca15ae Mon Sep 17 00:00:00 2001 From: Jonathan LEGRAND Date: Thu, 16 Apr 2026 14:40:57 +0200 Subject: [PATCH 03/12] Add optional FSDB authentication via environment variables - Read `ROMI_DB_NOAUTH` from the environment and pass it as `no_auth` to `FSDB` constructor in `romitask/src/romitask/task.py` - Perform `db.login` only when `no_auth` is false, using `ROMI_DB_USER` and `ROMI_DB_PASSWORD` environment variables - Preserve existing behavior by defaulting `no_auth` to `False` when the variable is unset - Ensure DB connection is still established with `db.connect()` before conditional login --- src/romitask/task.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/romitask/task.py b/src/romitask/task.py index 6520a63..9295344 100644 --- a/src/romitask/task.py +++ b/src/romitask/task.py @@ -193,9 +193,11 @@ def parse(self, scan_path): scan_id = path[-1] # create & connect to `db` if not defined: if db is None: # TODO: cannot change DB during run... - db = FSDB(db_path) + no_auth = os.getenv("ROMI_DB_NOAUTH")=='1' or False + db = FSDB(db_path, no_auth=no_auth) db.connect() - db.login(username=os.getenv("ROMI_DB_USER"), password=os.getenv("ROMI_DB_PASSWORD")) + if not no_auth: + db.login(username=os.getenv("ROMI_DB_USER"), password=os.getenv("ROMI_DB_PASSWORD")) # Get the scan dataset object or create one & return it if db.scan_exists(scan_id): scan = db.get_scan(scan_id) From 4620241d662a294495f372ac4a9190b0e5e76673 Mon Sep 17 00:00:00 2001 From: Jonathan LEGRAND Date: Thu, 16 Apr 2026 14:41:23 +0200 Subject: [PATCH 04/12] Add dotenv loading and `--no-auth` support to `romi_run_task.py` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Import `dotenv_values` and read environment variables from `/.env`. - Introduce `--no-auth` CLI flag for testing with automatic admin login. - Merge dotenv values into a custom `env` dict and set `LUIGI_CONFIG_PARSER`, `LUIGI_CONFIG_PATH`, and default `PYOPENCL_CTX`. - When `--no-auth` is used, ensure `ROMI_DB_NOAUTH` is set to `"1"` unless explicitly disabled via environment or `.env`. - Update subprocess call to merge custom `env` with `os.environ` so system‑wide variables overwrite duplicates. - Pass `no_auth=args.no_auth` to `run_task` invocation. --- src/romitask/cli/romi_run_task.py | 32 ++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/src/romitask/cli/romi_run_task.py b/src/romitask/cli/romi_run_task.py index bfaa726..32974ab 100755 --- a/src/romitask/cli/romi_run_task.py +++ b/src/romitask/cli/romi_run_task.py @@ -64,6 +64,8 @@ from pathlib import Path import toml +from dotenv import dotenv_values + from romitask import PIPE_TOML from romitask import SCAN_TOML from romitask.log import LOG_LEVELS @@ -115,6 +117,8 @@ def parsing(): help="Username for FSDB login.") parser.add_argument('--db-password', dest='db_password', type=str, default=None, help="Password for FSDB login.") + parser.add_argument('--no-auth', dest='no_auth', action="store_true", + help="Use a database with automatic 'admin' user log in, for testing purposes only.") # Luigi related arguments: luigi = parser.add_argument_group("luigi options") @@ -533,10 +537,23 @@ def run_task(dataset_path, task, config, **kwargs): with open(logging_file_path, 'w') as f: f.write(logging_config) - # - Define environment variables to provide the logging TOML file path to `luigi`: - env = {"LUIGI_CONFIG_PARSER": "toml", "LUIGI_CONFIG_PATH": file_path} - env.update({'PYOPENCL_CTX': '0'}) # default choice - + # - Define a custom environment variables dictionary + # Get any value defined : + env = dotenv_values(dataset_path / ".env") + # Set the logging TOML file path to `luigi`: + env.update({"LUIGI_CONFIG_PARSER": "toml", "LUIGI_CONFIG_PATH": file_path}) + # Set the default choice for PyOpenCL context: + env.update({'PYOPENCL_CTX': '0'}) + # Set the database in "no authentication" mode + if kwargs.get('no_auth'): + # Enable the "no authentication" session manager if not forbidden + # 1. by a 'ROMI_DB_NOAUTH' defined in as environment variable + # 2. by a 'ROMI_DB_NOAUTH' defined in the dotenv file at the root of the DB + env['ROMI_DB_NOAUTH'] = (os.getenv('ROMI_DB_NOAUTH') or env.get('ROMI_DB_NOAUTH', None)) or "1" + if env['ROMI_DB_NOAUTH'] == "0": + logger.error(f"Disabling authentication on this database if forbidden.") + logger.info(f"Use `--db-user` and `--db-password` to pass your credentials to the CLI.") + raise ValueError("Credentials required") # Add database credentials to environment if provided if kwargs.get('db_user') and kwargs.get('db_password'): env['ROMI_DB_USER'] = kwargs['db_user'] @@ -551,12 +568,13 @@ def run_task(dataset_path, task, config, **kwargs): if kwargs.get('local_scheduler', False): cmd.append("--local-scheduler") + # - Print or Start the configured pipeline: if kwargs.get('dry_run', False): logger.info(f"Luigi command to call is:\n{cmd}") else: t_start = time.time() - # - Start the configured pipeline: - p = subprocess.run(cmd, env={**os.environ, **env}, check=True) + # System‑wide variables (`os.environ`) overwrite any duplicate keys from the custom `env` dict + p = subprocess.run(cmd, env={**env, **os.environ}, check=True) delta = timedelta(seconds=time.time() - t_start) delta = str(delta).split('.')[0] # to get HH:MM:SS if p.returncode == 0: @@ -646,7 +664,7 @@ def _dataset_path_error(args): run_task(folders, args.task, args.config, log_level=args.log_level, luigicmd=args.luigicmd, module=args.module, local_scheduler=args.ls, dry_run=args.dry_run, - db_user=args.db_user, db_password=args.db_password) + no_auth=args.no_auth, db_user=args.db_user, db_password=args.db_password) if __name__ == '__main__': From 817cee736d1cbcb408279c5d30e299d722f45eba Mon Sep 17 00:00:00 2001 From: Jonathan LEGRAND Date: Tue, 28 Apr 2026 21:26:43 +0200 Subject: [PATCH 05/12] Pass `no_auth` argument to `run_task` call - Updated `romitask/src/romitask/cli/romi_run_task.py` to include ``no_auth=args.no_auth`` in the `run_task` invocation. --- src/romitask/cli/romi_run_task.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/romitask/cli/romi_run_task.py b/src/romitask/cli/romi_run_task.py index 32974ab..e68f4ca 100755 --- a/src/romitask/cli/romi_run_task.py +++ b/src/romitask/cli/romi_run_task.py @@ -656,7 +656,7 @@ def _dataset_path_error(args): run_task(dataset_path, args.task, args.config, log_level=args.log_level, luigicmd=args.luigicmd, module=args.module, local_scheduler=args.ls, dry_run=args.dry_run, - db_user=args.db_user, db_password=args.db_password) + no_auth=args.no_auth, db_user=args.db_user, db_password=args.db_password) except Exception as e: print(e) else: From 1b691cba1b10612b6f1e6537e2be0cc4205afc13 Mon Sep 17 00:00:00 2001 From: Jonathan LEGRAND Date: Tue, 5 May 2026 23:33:26 +0200 Subject: [PATCH 06/12] Add MPL backend configuration to luigi environment MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Extend the `env` dict in `romitask/src/romitask/cli/romi_run_task.py` with `"MPLBACKEND": "Agg"` to enforce a non‑interactive matplotlib backend during task execution. --- src/romitask/cli/romi_run_task.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/romitask/cli/romi_run_task.py b/src/romitask/cli/romi_run_task.py index e68f4ca..2e3c4f5 100755 --- a/src/romitask/cli/romi_run_task.py +++ b/src/romitask/cli/romi_run_task.py @@ -541,7 +541,7 @@ def run_task(dataset_path, task, config, **kwargs): # Get any value defined : env = dotenv_values(dataset_path / ".env") # Set the logging TOML file path to `luigi`: - env.update({"LUIGI_CONFIG_PARSER": "toml", "LUIGI_CONFIG_PATH": file_path}) + env.update({"LUIGI_CONFIG_PARSER": "toml", "LUIGI_CONFIG_PATH": file_path, "MPLBACKEND": "Agg"}) # Set the default choice for PyOpenCL context: env.update({'PYOPENCL_CTX': '0'}) # Set the database in "no authentication" mode From 8aca7d58af7946b7263781723128bf11261a9915 Mon Sep 17 00:00:00 2001 From: Jonathan LEGRAND Date: Thu, 9 Apr 2026 00:13:51 +0200 Subject: [PATCH 07/12] Fix consistent wording for association phrase - Replaced "associated to" with "associated with" across multiple files for consistent phrasing. --- src/romitask/cli/print_task_info.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/romitask/cli/print_task_info.py b/src/romitask/cli/print_task_info.py index 65d9d1f..6af0f3c 100644 --- a/src/romitask/cli/print_task_info.py +++ b/src/romitask/cli/print_task_info.py @@ -288,14 +288,14 @@ def main(): md_path = os.path.join(args.db_path, 'metadata') json_list = [f for f in os.listdir(md_path) if f.startswith(args.task) and f.endswith('.json')] if json_list == []: - raise IOError("Could not find the JSON metadata file associated to task '{}' in dataset '{}'!".format(args.task, + raise IOError("Could not find the JSON metadata file associated with task '{}' in dataset '{}'!".format(args.task, args.db_path)) elif len(json_list) == 1: md_json = json_list[0] - print("Found a JSON metadata file associated to task '{}' in dataset '{}'!".format(args.task, args.db_path)) + print("Found a JSON metadata file associated with task '{}' in dataset '{}'!".format(args.task, args.db_path)) md_json = os.path.join(md_path, md_json) else: - print("Found more than one JSON metadata file associated to task '{}' in dataset '{}':".format(args.task, + print("Found more than one JSON metadata file associated with task '{}' in dataset '{}':".format(args.task, args.db_path)) [print(" - {}".format(json_f)) for json_f in json_list] md_json = max([os.path.join(md_path, json_f) for json_f in json_list], key=os.path.getctime) From c0b5bfe9181f0ac450d77b529e565c90b2952e6a Mon Sep 17 00:00:00 2001 From: Jonathan LEGRAND Date: Thu, 9 Apr 2026 11:44:56 +0200 Subject: [PATCH 08/12] Replace `dummy_db` import path from `plantdb.commons.fsdb` to `plantdb.commons.test_database` --- src/romitask/task.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/romitask/task.py b/src/romitask/task.py index 890df48..6520a63 100644 --- a/src/romitask/task.py +++ b/src/romitask/task.py @@ -234,7 +234,7 @@ class FSDBConfiguration(luigi.Config): Examples -------- >>> from romitask.task import FSDBConfiguration - >>> from plantdb.commons.fsdb import dummy_db + >>> from plantdb.commons.test_database import dummy_db >>> # - First, let's create a dummy FSDB database to play with: >>> db = dummy_db() >>> db.connect() @@ -256,7 +256,7 @@ class ScanConfiguration(luigi.Config): Examples -------- >>> from romitask.task import ScanConfiguration - >>> from plantdb.commons.fsdb import dummy_db + >>> from plantdb.commons.test_database import dummy_db >>> # - First, let's create a dummy FSDB database to play with: >>> db = dummy_db() >>> db.connect() @@ -292,7 +292,7 @@ class FilesetTarget(luigi.Target): -------- >>> from romitask.task import FilesetTarget >>> from plantdb.commons.fsdb import FSDB - >>> from plantdb.commons.fsdb import dummy_db + >>> from plantdb.commons.test_database import dummy_db >>> # - First, let's create a dummy FSDB database to play with: >>> db = dummy_db() >>> db.connect() From bc5bc82c625f1bd4ca75c7761ee5a51cf66ba614 Mon Sep 17 00:00:00 2001 From: Jonathan LEGRAND Date: Thu, 16 Apr 2026 14:40:57 +0200 Subject: [PATCH 09/12] Add optional FSDB authentication via environment variables - Read `ROMI_DB_NOAUTH` from the environment and pass it as `no_auth` to `FSDB` constructor in `romitask/src/romitask/task.py` - Perform `db.login` only when `no_auth` is false, using `ROMI_DB_USER` and `ROMI_DB_PASSWORD` environment variables - Preserve existing behavior by defaulting `no_auth` to `False` when the variable is unset - Ensure DB connection is still established with `db.connect()` before conditional login --- src/romitask/task.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/romitask/task.py b/src/romitask/task.py index 6520a63..9295344 100644 --- a/src/romitask/task.py +++ b/src/romitask/task.py @@ -193,9 +193,11 @@ def parse(self, scan_path): scan_id = path[-1] # create & connect to `db` if not defined: if db is None: # TODO: cannot change DB during run... - db = FSDB(db_path) + no_auth = os.getenv("ROMI_DB_NOAUTH")=='1' or False + db = FSDB(db_path, no_auth=no_auth) db.connect() - db.login(username=os.getenv("ROMI_DB_USER"), password=os.getenv("ROMI_DB_PASSWORD")) + if not no_auth: + db.login(username=os.getenv("ROMI_DB_USER"), password=os.getenv("ROMI_DB_PASSWORD")) # Get the scan dataset object or create one & return it if db.scan_exists(scan_id): scan = db.get_scan(scan_id) From fd39b53320f2300b1e1cbaac2604967a446f44d3 Mon Sep 17 00:00:00 2001 From: Jonathan LEGRAND Date: Thu, 16 Apr 2026 14:41:23 +0200 Subject: [PATCH 10/12] Add dotenv loading and `--no-auth` support to `romi_run_task.py` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Import `dotenv_values` and read environment variables from `/.env`. - Introduce `--no-auth` CLI flag for testing with automatic admin login. - Merge dotenv values into a custom `env` dict and set `LUIGI_CONFIG_PARSER`, `LUIGI_CONFIG_PATH`, and default `PYOPENCL_CTX`. - When `--no-auth` is used, ensure `ROMI_DB_NOAUTH` is set to `"1"` unless explicitly disabled via environment or `.env`. - Update subprocess call to merge custom `env` with `os.environ` so system‑wide variables overwrite duplicates. - Pass `no_auth=args.no_auth` to `run_task` invocation. --- src/romitask/cli/romi_run_task.py | 32 ++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/src/romitask/cli/romi_run_task.py b/src/romitask/cli/romi_run_task.py index bfaa726..32974ab 100755 --- a/src/romitask/cli/romi_run_task.py +++ b/src/romitask/cli/romi_run_task.py @@ -64,6 +64,8 @@ from pathlib import Path import toml +from dotenv import dotenv_values + from romitask import PIPE_TOML from romitask import SCAN_TOML from romitask.log import LOG_LEVELS @@ -115,6 +117,8 @@ def parsing(): help="Username for FSDB login.") parser.add_argument('--db-password', dest='db_password', type=str, default=None, help="Password for FSDB login.") + parser.add_argument('--no-auth', dest='no_auth', action="store_true", + help="Use a database with automatic 'admin' user log in, for testing purposes only.") # Luigi related arguments: luigi = parser.add_argument_group("luigi options") @@ -533,10 +537,23 @@ def run_task(dataset_path, task, config, **kwargs): with open(logging_file_path, 'w') as f: f.write(logging_config) - # - Define environment variables to provide the logging TOML file path to `luigi`: - env = {"LUIGI_CONFIG_PARSER": "toml", "LUIGI_CONFIG_PATH": file_path} - env.update({'PYOPENCL_CTX': '0'}) # default choice - + # - Define a custom environment variables dictionary + # Get any value defined : + env = dotenv_values(dataset_path / ".env") + # Set the logging TOML file path to `luigi`: + env.update({"LUIGI_CONFIG_PARSER": "toml", "LUIGI_CONFIG_PATH": file_path}) + # Set the default choice for PyOpenCL context: + env.update({'PYOPENCL_CTX': '0'}) + # Set the database in "no authentication" mode + if kwargs.get('no_auth'): + # Enable the "no authentication" session manager if not forbidden + # 1. by a 'ROMI_DB_NOAUTH' defined in as environment variable + # 2. by a 'ROMI_DB_NOAUTH' defined in the dotenv file at the root of the DB + env['ROMI_DB_NOAUTH'] = (os.getenv('ROMI_DB_NOAUTH') or env.get('ROMI_DB_NOAUTH', None)) or "1" + if env['ROMI_DB_NOAUTH'] == "0": + logger.error(f"Disabling authentication on this database if forbidden.") + logger.info(f"Use `--db-user` and `--db-password` to pass your credentials to the CLI.") + raise ValueError("Credentials required") # Add database credentials to environment if provided if kwargs.get('db_user') and kwargs.get('db_password'): env['ROMI_DB_USER'] = kwargs['db_user'] @@ -551,12 +568,13 @@ def run_task(dataset_path, task, config, **kwargs): if kwargs.get('local_scheduler', False): cmd.append("--local-scheduler") + # - Print or Start the configured pipeline: if kwargs.get('dry_run', False): logger.info(f"Luigi command to call is:\n{cmd}") else: t_start = time.time() - # - Start the configured pipeline: - p = subprocess.run(cmd, env={**os.environ, **env}, check=True) + # System‑wide variables (`os.environ`) overwrite any duplicate keys from the custom `env` dict + p = subprocess.run(cmd, env={**env, **os.environ}, check=True) delta = timedelta(seconds=time.time() - t_start) delta = str(delta).split('.')[0] # to get HH:MM:SS if p.returncode == 0: @@ -646,7 +664,7 @@ def _dataset_path_error(args): run_task(folders, args.task, args.config, log_level=args.log_level, luigicmd=args.luigicmd, module=args.module, local_scheduler=args.ls, dry_run=args.dry_run, - db_user=args.db_user, db_password=args.db_password) + no_auth=args.no_auth, db_user=args.db_user, db_password=args.db_password) if __name__ == '__main__': From 91ccebbf5e2d00dde260e94a11ac86803199cfac Mon Sep 17 00:00:00 2001 From: Jonathan LEGRAND Date: Tue, 28 Apr 2026 21:26:43 +0200 Subject: [PATCH 11/12] Pass `no_auth` argument to `run_task` call - Updated `romitask/src/romitask/cli/romi_run_task.py` to include ``no_auth=args.no_auth`` in the `run_task` invocation. --- src/romitask/cli/romi_run_task.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/romitask/cli/romi_run_task.py b/src/romitask/cli/romi_run_task.py index 32974ab..e68f4ca 100755 --- a/src/romitask/cli/romi_run_task.py +++ b/src/romitask/cli/romi_run_task.py @@ -656,7 +656,7 @@ def _dataset_path_error(args): run_task(dataset_path, args.task, args.config, log_level=args.log_level, luigicmd=args.luigicmd, module=args.module, local_scheduler=args.ls, dry_run=args.dry_run, - db_user=args.db_user, db_password=args.db_password) + no_auth=args.no_auth, db_user=args.db_user, db_password=args.db_password) except Exception as e: print(e) else: From d8208495ef0412095c0904b69e0830c50cb364ed Mon Sep 17 00:00:00 2001 From: Jonathan LEGRAND Date: Tue, 5 May 2026 23:33:26 +0200 Subject: [PATCH 12/12] Add MPL backend configuration to luigi environment MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Extend the `env` dict in `romitask/src/romitask/cli/romi_run_task.py` with `"MPLBACKEND": "Agg"` to enforce a non‑interactive matplotlib backend during task execution. --- src/romitask/cli/romi_run_task.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/romitask/cli/romi_run_task.py b/src/romitask/cli/romi_run_task.py index e68f4ca..2e3c4f5 100755 --- a/src/romitask/cli/romi_run_task.py +++ b/src/romitask/cli/romi_run_task.py @@ -541,7 +541,7 @@ def run_task(dataset_path, task, config, **kwargs): # Get any value defined : env = dotenv_values(dataset_path / ".env") # Set the logging TOML file path to `luigi`: - env.update({"LUIGI_CONFIG_PARSER": "toml", "LUIGI_CONFIG_PATH": file_path}) + env.update({"LUIGI_CONFIG_PARSER": "toml", "LUIGI_CONFIG_PATH": file_path, "MPLBACKEND": "Agg"}) # Set the default choice for PyOpenCL context: env.update({'PYOPENCL_CTX': '0'}) # Set the database in "no authentication" mode