From b8120f5078055aceafa04bd515146d72705419ed Mon Sep 17 00:00:00 2001
From: Samuel Gaist <samuel.gaist@idiap.ch>
Date: Thu, 21 Mar 2019 15:38:20 +0100
Subject: [PATCH] [scripts][editor_cli] Implement editor start for specific
 asset

Part of #186
Replaces !51
---
 beat/editor/scripts/editor_cli.py | 86 ++++++++++++++++++++++---------
 1 file changed, 61 insertions(+), 25 deletions(-)

diff --git a/beat/editor/scripts/editor_cli.py b/beat/editor/scripts/editor_cli.py
index d85bc57c..5b534482 100644
--- a/beat/editor/scripts/editor_cli.py
+++ b/beat/editor/scripts/editor_cli.py
@@ -35,6 +35,7 @@ import click
 import pkg_resources
 
 from click_plugins import with_plugins
+
 from PyQt5.QtWidgets import QApplication
 from PyQt5.QtCore import QCoreApplication
 
@@ -45,23 +46,21 @@ from beat.cmdline.decorators import verbosity_option
 
 from ..utils import setup_logger
 from ..widgets.mainwindow import MainWindow
+from ..widgets.assetwidget import AssetWidget
+from ..backend.assetmodel import AssetType
+
+global logger
+logger = None
 
-EPILOG = """\b
+START_EPILOG = """\b
 Example:
         $ beat editor start
 
-        """
+"""
 
 
 @with_plugins(pkg_resources.iter_entry_points("beat.editor.cli"))
 @click.group(cls=AliasedGroup)
-@click.pass_context
-def editor(ctx):
-    """beat.editor commands."""
-    pass
-
-
-@editor.command(epilog=EPILOG)
 @click.option(
     "--prefix",
     "-p",
@@ -76,35 +75,72 @@ def editor(ctx):
 )
 @verbosity_option()
 @click.pass_context
+def editor(ctx, prefix, cache):
+    """beat.editor commands."""
+    ctx.meta["prefix"] = prefix
+    ctx.meta["cache"] = cache
+
+    global logger
+    logger = setup_logger("beat.editor", ctx.meta["verbosity"])
+
+    QCoreApplication.setApplicationName("beat.editor")
+    QCoreApplication.setOrganizationName("Idiap")
+    QCoreApplication.setOrganizationDomain("ch.idiap")
+
+
+@editor.command(epilog=START_EPILOG)
+@click.pass_context
 @raise_on_error
-def start(ctx, prefix, cache):
+def start(ctx):
     """Start the beat editor
     """
 
-    ctx.meta["prefix"] = prefix
-    ctx.meta["cache"] = cache
+    config = Configuration(ctx.meta)
+    global logger
+    logger.info("BEAT prefix set to `%s'", config.path)
+    logger.info("BEAT cache set to `%s'", config.cache)
 
-    completions = dict(
-        prog=os.path.basename(sys.argv[0]),
-        version=pkg_resources.require("beat.editor")[0].version,
-    )
+    app = QApplication(sys.argv)
 
-    completions.update(Configuration({}).as_dict())
+    mainwindow = MainWindow()
+    mainwindow.set_prefix_root(os.path.abspath(config.path))
+    mainwindow.show()
+
+    return app.exec_()
+
+
+EDIT_EPILOG = """\b
+Example:
+        $ beat editor edit algorithm user/my_algo/1
+
+"""
 
-    # Check that we are in a BEAT working folder
-    logger = setup_logger("beat.editor", ctx.meta["verbosity"])
+
+@editor.command(epilog=EDIT_EPILOG)
+@click.argument("asset_type")
+@click.argument("asset_name")
+@click.pass_context
+@raise_on_error
+def edit(ctx, asset_type, asset_name):
+    """Edit one specific asset
+    """
 
     config = Configuration(ctx.meta)
+    global logger
     logger.info("BEAT prefix set to `%s'", config.path)
     logger.info("BEAT cache set to `%s'", config.cache)
+    prefix_root = os.path.abspath(config.path)
 
     app = QApplication(sys.argv)
 
-    QCoreApplication.setApplicationName("beat.editor")
-    QCoreApplication.setOrganizationName("Idiap")
-    QCoreApplication.setOrganizationDomain("ch.idiap")
+    asset_widget = AssetWidget()
+    asset_widget.set_prefix_root(prefix_root)
+
+    asset_path = os.path.join(
+        prefix_root, AssetType.path(AssetType[asset_type.upper()]), asset_name + ".json"
+    )
+
+    asset_widget.load_json(asset_path)
+    asset_widget.show()
 
-    mainwindow = MainWindow()
-    mainwindow.set_prefix_root(config.path)
-    mainwindow.show()
     return app.exec_()
-- 
GitLab