fixed plugins command in CLI
Project: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/commit/c7ca560f Tree: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/tree/c7ca560f Diff: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/diff/c7ca560f Branch: refs/heads/logger_task Commit: c7ca560fac3485744136d4833e143f227e263a02 Parents: 0e848f5 Author: Ran Ziv <[email protected]> Authored: Sun Apr 2 22:40:15 2017 +0300 Committer: Ran Ziv <[email protected]> Committed: Thu Apr 6 11:29:17 2017 +0300 ---------------------------------------------------------------------- aria/cli/commands/plugins.py | 80 +++++++++++++++++---------------------- aria/cli/env.py | 2 +- aria/orchestrator/plugin.py | 3 +- 3 files changed, 36 insertions(+), 49 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/c7ca560f/aria/cli/commands/plugins.py ---------------------------------------------------------------------- diff --git a/aria/cli/commands/plugins.py b/aria/cli/commands/plugins.py index d31aa99..4d568d7 100644 --- a/aria/cli/commands/plugins.py +++ b/aria/cli/commands/plugins.py @@ -13,18 +13,16 @@ # See the License for the specific language governing permissions and # limitations under the License. -import tarfile +import zipfile from ..table import print_data -from ..cli import helptexts, aria +from ..cli import aria from ..exceptions import AriaCliError from ..utils import storage_sort_param -PLUGIN_COLUMNS = ['id', 'package_name', 'package_version', 'distribution', - 'supported_platform', 'distribution_release', 'uploaded_at'] -EXCLUDED_COLUMNS = ['archive_name', 'distribution_version', 'excluded_wheels', - 'package_source', 'supported_py_versions', 'wheels'] +PLUGIN_COLUMNS = ['id', 'package_name', 'package_version', 'supported_platform', + 'distribution', 'distribution_release', 'uploaded_at'] @aria.group(name='plugins') @@ -45,24 +43,23 @@ def validate(plugin_path, logger): This will try to validate the plugin's archive is not corrupted. A valid plugin is a wagon (http://github.com/cloudify-cosomo/wagon) - in the tar.gz format (suffix may also be .wgn). + in the zip format (suffix may also be .wgn). `PLUGIN_PATH` is the path to wagon archive to validate. """ logger.info('Validating plugin {0}...'.format(plugin_path)) - if not tarfile.is_tarfile(plugin_path): + if not zipfile.is_zipfile(plugin_path): raise AriaCliError( 'Archive {0} is of an unsupported type. Only ' - 'tar.gz/wgn is allowed'.format(plugin_path)) - with tarfile.open(plugin_path) as tar: - tar_members = tar.getmembers() - package_json_path = "{0}/{1}".format( - tar_members[0].name, 'package.json') - # TODO: Find a better way to validate a plugin. + 'zip/wgn is allowed'.format(plugin_path)) + with zipfile.ZipFile(plugin_path, 'r') as zip_file: + infos = zip_file.infolist() try: - tar.getmember(package_json_path) - except KeyError: + package_name = infos[0].filename[:infos[0].filename.index('/')] + package_json_path = "{0}/{1}".format(package_name, 'package.json') + zip_file.getinfo(package_json_path) + except (KeyError, ValueError, IndexError): raise AriaCliError( 'Failed to validate plugin {0} ' '(package.json was not found in archive)'.format(plugin_path)) @@ -70,20 +67,20 @@ def validate(plugin_path, logger): logger.info('Plugin validated successfully') [email protected](name='delete', - short_help='Delete a plugin') [email protected]('plugin-id') [email protected]() [email protected]_model_storage [email protected]_logger -def delete(plugin_id, model_storage, logger): - """Delete a plugin - - `PLUGIN_ID` is the id of the plugin to delete. - """ - logger.info('Deleting plugin {0}...'.format(plugin_id)) - model_storage.plugin.delete(plugin_id=plugin_id) - logger.info('Plugin deleted') +# @plugins.command(name='delete', +# short_help='Delete a plugin') +# @aria.argument('plugin-id') +# @aria.options.verbose() +# @aria.pass_model_storage +# @aria.pass_logger +# def delete(plugin_id, model_storage, logger): +# """Delete a plugin +# +# `PLUGIN_ID` is the id of the plugin to delete. +# """ +# logger.info('Deleting plugin {0}...'.format(plugin_id)) +# model_storage.plugin.delete(plugin_id=plugin_id) +# logger.info('Plugin deleted') @plugins.command(name='install', @@ -91,13 +88,14 @@ def delete(plugin_id, model_storage, logger): @aria.argument('plugin-path') @aria.options.verbose() @aria.pass_context [email protected]_plugin_manager @aria.pass_logger -def install(ctx, plugin_path, logger): +def install(ctx, plugin_path, plugin_manager, logger): """Install a plugin `PLUGIN_PATH` is the path to wagon archive to install. """ - ctx.invoke(validate, plugin_path=plugin_path) + # ctx.invoke(validate, plugin_path=plugin_path) logger.info('Installing plugin {0}...'.format(plugin_path)) plugin = plugin_manager.install(plugin_path) logger.info("Plugin installed. The plugin's id is {0}".format(plugin.id)) @@ -116,8 +114,7 @@ def show(plugin_id, model_storage, logger): """ logger.info('Showing plugin {0}...'.format(plugin_id)) plugin = model_storage.plugin.get(plugin_id) - _transform_plugin_response(plugin) - print_data(PLUGIN_COLUMNS, plugin, 'Plugin:') + print_data(PLUGIN_COLUMNS, plugin.to_dict(), 'Plugin:') @plugins.command(name='list', @@ -131,15 +128,6 @@ def list(sort_by, descending, model_storage, logger): """List all plugins on the manager """ logger.info('Listing all plugins...') - plugins_list = model_storage.plugin.list( - sort=storage_sort_param(sort_by, descending)) - for plugin in plugins_list: - _transform_plugin_response(plugin) - print_data(PLUGIN_COLUMNS, plugins_list, 'Plugins:') - - -def _transform_plugin_response(plugin): - """Remove any columns that shouldn't be displayed in the CLI - """ - for column in EXCLUDED_COLUMNS: - plugin.pop(column, None) + plugins = [p.to_dict() for p in model_storage.plugin.list( + sort=storage_sort_param(sort_by, descending))] + print_data(PLUGIN_COLUMNS, plugins, 'Plugins:') http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/c7ca560f/aria/cli/env.py ---------------------------------------------------------------------- diff --git a/aria/cli/env.py b/aria/cli/env.py index 5d34141..6d02cf5 100644 --- a/aria/cli/env.py +++ b/aria/cli/env.py @@ -109,7 +109,7 @@ class Environment(object): if not os.path.exists(self._plugins_dir): os.makedirs(self._plugins_dir) - return PluginManager(self._model_storage, self._plugins_dir) + return PluginManager(self.model_storage, self._plugins_dir) env = Environment(os.path.join( http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/c7ca560f/aria/orchestrator/plugin.py ---------------------------------------------------------------------- diff --git a/aria/orchestrator/plugin.py b/aria/orchestrator/plugin.py index d815754..d526e9c 100644 --- a/aria/orchestrator/plugin.py +++ b/aria/orchestrator/plugin.py @@ -46,8 +46,7 @@ class PluginManager(object): archive_name=metadata['archive_name'], supported_platform=metadata['supported_platform'], supported_py_versions=metadata['supported_python_versions'], - # Remove suffix colon after upgrading wagon to > 0.5.0 - distribution=os_props.get('distribution:') or os_props.get('distribution'), + distribution=os_props.get('distribution'), distribution_release=os_props['distribution_version'], distribution_version=os_props['distribution_release'], package_name=metadata['package_name'],
