| import click |
| |
| |
| @click.command("updatedb") |
| @click.argument("instance_path", type=click.UNPROCESSED) |
| @click.option("--database", default="default", show_default=True, |
| help="database to modify") |
| @click.option("--testsuite", required=True, help="testsuite to modify") |
| @click.option("--tmp-dir", default="lnt_tmp", show_default=True, |
| help="name of the temp file directory") |
| @click.option("--show-sql", is_flag=True, |
| help="show SQL statements") |
| @click.option("--delete-machine", "delete_machines", default=[], |
| type=click.UNPROCESSED, show_default=True, multiple=True, |
| help="machine names to delete") |
| @click.option("--delete-run", "delete_runs", default=[], show_default=True, |
| multiple=True, help="run ids to delete", type=int) |
| @click.option("--delete-order", default=[], show_default=True, |
| help="run ids to delete") |
| def action_updatedb(instance_path, database, testsuite, tmp_dir, show_sql, |
| delete_machines, delete_runs, delete_order): |
| """modify a database""" |
| from .common import init_logger |
| |
| import contextlib |
| import lnt.server.instance |
| import logging |
| |
| init_logger(logging.INFO if show_sql else logging.WARNING, |
| show_sql=show_sql) |
| |
| # Load the instance. |
| instance = lnt.server.instance.Instance.frompath(instance_path) |
| |
| # Get the database and test suite. |
| with contextlib.closing(instance.get_database(database)) as db: |
| session = db.make_session() |
| ts = db.testsuite[testsuite] |
| # Compute a list of all the runs to delete. |
| if delete_order: |
| runs = session.query(ts.Run).join(ts.Order) \ |
| .filter(ts.Order.id == delete_order).all() |
| else: |
| runs = session.query(ts.Run) \ |
| .filter(ts.Run.id.in_(delete_runs)).all() |
| for run in runs: |
| session.delete(run) |
| |
| if delete_machines: |
| machines = session.query(ts.Machine) \ |
| .filter(ts.Machine.name.in_(delete_machines)).all() |
| for machine in machines: |
| session.delete(machine) |
| |
| session.commit() |