remove subcommand

This commit is contained in:
Michael Gummelt
2015-04-30 14:12:02 -07:00
parent 40ae01533b
commit 99ee104e70
10 changed files with 1 additions and 323 deletions

View File

@@ -1,12 +0,0 @@
{
"$schema": "http://json-schema.org/schema#",
"type": "object",
"properties": {
"pip_find_links": {
"type": "string",
"title": "Location for finding packages",
"description": "If a url or path to an html file, then parse for links to archives. If a local path or file:// url thats a directory, then look for archives in the directory listing."
}
},
"additionalProperties": false
}

View File

@@ -1,183 +0,0 @@
"""Install and manage DCOS CLI subcommands
Usage:
dcos subcommand --config-schema
dcos subcommand --info
dcos subcommand info
dcos subcommand install <package>
dcos subcommand list
dcos subcommand uninstall <package_name>
Options:
--help Show this screen
--info Show a short description of this subcommand
--version Show version
Positional arguments:
<package> The subcommand package wheel
<package_name> The name of the subcommand package
"""
import json
import os
import dcoscli
import docopt
import pkg_resources
import pkginfo
from dcos.api import (cmds, config, constants, emitting, errors, options,
subcommand, util)
logger = util.get_logger(__name__)
emitter = emitting.FlatEmitter()
def main():
err = util.configure_logger_from_environ()
if err is not None:
emitter.publish(err)
return 1
args = docopt.docopt(
__doc__,
version='dcos-subcommand version {}'.format(dcoscli.version))
returncode, err = cmds.execute(_cmds(), args)
if err is not None:
emitter.publish(err)
emitter.publish(options.make_generic_usage_message(__doc__))
return 1
return returncode
def _cmds():
"""
:returns: all the supported commands
:rtype: dcos.api.cmds.Command
"""
return [
cmds.Command(
hierarchy=['subcommand', 'install'],
arg_keys=['<package>'],
function=_install),
cmds.Command(
hierarchy=['subcommand', 'uninstall'],
arg_keys=['<package_name>'],
function=_uninstall),
cmds.Command(
hierarchy=['subcommand', 'list'],
arg_keys=[],
function=_list),
cmds.Command(
hierarchy=['subcommand'],
arg_keys=['--config-schema', '--info'],
function=_subcommand),
]
def _subcommand(config_schema, info):
"""
:returns: Process status
:rtype: int
"""
if config_schema:
schema = json.loads(
pkg_resources.resource_string(
'dcoscli',
'data/config-schema/subcommand.json').decode('utf-8'))
emitter.publish(schema)
elif info:
_info()
else:
emitter.publish(options.make_generic_usage_message(__doc__))
return 1
return 0
def _info():
"""
:returns: the process return code
:rtype: int
"""
emitter.publish(__doc__.split('\n')[0])
return 0
def _list():
"""
:returns: the process return code
:rtype: int
"""
emitter.publish(subcommand.distributions(util.dcos_path()))
return 0
def _install(package):
"""
:returns: the process return code
:rtype: int
"""
dcos_config = config.load_from_path(os.environ[constants.DCOS_CONFIG_ENV])
pip_operation = [package]
if 'subcommand.pip_find_links' in dcos_config:
pip_operation.append(
'--find-links {}'.format(dcos_config['subcommand.pip_find_links']))
distribution_name, err = _distribution_name(package)
if err is not None:
emitter.publish(err)
emitter.publish(errors.DefaultError("Note: To install only the \
subcommand for a package, run `dcos package install <package> --cli` instead"))
return 1
env_dir = os.path.join(subcommand.package_dir(distribution_name),
constants.DCOS_SUBCOMMAND_VIRTUALENV_SUBDIR)
err = subcommand.install_with_pip(
distribution_name,
env_dir,
pip_operation)
if err is not None:
emitter.publish(err)
return 1
return 0
def _uninstall(package_name):
"""
:returns: the process return code
:rtype: int
"""
subcommand.uninstall(package_name)
return 0
def _distribution_name(package_path):
"""
:returns: the distribution's name
:rtype: (str, dcos.api.errors.Error)
"""
try:
return (pkginfo.Wheel(package_path).name, None)
except ValueError as error:
logger.error('Failed to read wheel (%s): %r', package_path, error)
return (
None,
errors.DefaultError(
'Failed to read file: {}'.format(error))
)

View File

@@ -92,7 +92,6 @@ setup(
'dcos-config=dcoscli.config.main:main',
'dcos-marathon=dcoscli.marathon.main:main',
'dcos-package=dcoscli.package.main:main',
'dcos-subcommand=dcoscli.subcommand.main:main',
],
},

View File

@@ -1,8 +1,6 @@
[core]
reporting = false
email = "test@mail.com"
[subcommand]
pip_find_links = "../dist"
[marathon]
host = "localhost"
port = 8080

View File

@@ -65,7 +65,6 @@ marathon.port=8080
package.cache=tmp/cache
package.sources=['git://github.com/mesosphere/universe.git', \
'https://github.com/mesosphere/universe/archive/master.zip']
subcommand.pip_find_links=../dist
"""
assert_command(['dcos', 'config', 'show'],
stdout=stdout,

View File

@@ -21,7 +21,6 @@ Available DCOS commands:
\thelp \tDisplay command line usage information
\tmarathon \tDeploy and manage applications on the DCOS
\tpackage \tInstall and manage DCOS software packages
\tsubcommand \tInstall and manage DCOS CLI subcommands
Get detailed command description with 'dcos <command> --help'.
""".encode('utf-8')

View File

@@ -40,7 +40,6 @@ Available DCOS commands:
\thelp \tDisplay command line usage information
\tmarathon \tDeploy and manage applications on the DCOS
\tpackage \tInstall and manage DCOS software packages
\tsubcommand \tInstall and manage DCOS CLI subcommands
Get detailed command description with 'dcos <command> --help'.
""".encode('utf-8')

View File

@@ -258,8 +258,7 @@ def test_uninstall_subcommand():
_install_helloworld()
_uninstall_helloworld()
assert_command(['dcos', 'subcommand', 'list'],
stdout=b'[]\n')
assert_command(['dcos', 'package', 'list-installed'], stdout=b'[]\n')
def test_uninstall_cli():

View File

@@ -1,120 +0,0 @@
import json
import os
import pytest
from common import exec_command
@pytest.fixture
def package():
return os.environ['DCOS_TEST_WHEEL']
def test_help():
returncode, stdout, stderr = exec_command(['dcos', 'subcommand', '--help'])
assert returncode == 0
assert stdout == b"""Install and manage DCOS CLI subcommands
Usage:
dcos subcommand --config-schema
dcos subcommand --info
dcos subcommand info
dcos subcommand install <package>
dcos subcommand list
dcos subcommand uninstall <package_name>
Options:
--help Show this screen
--info Show a short description of this subcommand
--version Show version
Positional arguments:
<package> The subcommand package wheel
<package_name> The name of the subcommand package
"""
assert stderr == b''
def test_info():
returncode, stdout, stderr = exec_command(['dcos', 'subcommand', '--info'])
assert returncode == 0
assert stdout == b'Install and manage DCOS CLI subcommands\n'
assert stderr == b''
def test_list_empty_subcommand():
_list_subcommands(0)
def test_install_package(package):
_install_subcommand(package)
_list_subcommands(1)
_uninstall_subcommand('dcos-helloworld')
def test_install_existing_package(package):
_install_subcommand(package)
_install_subcommand(package)
_list_subcommands(1)
_uninstall_subcommand('dcos-helloworld')
def test_list_subcommand(package):
_install_subcommand(package)
_list_subcommands(1)
_uninstall_subcommand('dcos-helloworld')
def test_uninstall_missing_subcommand(package):
_uninstall_subcommand('missing-package')
def test_uninstall_helloworld(package):
_install_subcommand(package)
_list_subcommands(1)
_uninstall_subcommand('dcos-helloworld')
_list_subcommands(0)
def test_missing_wheel():
returncode, stdout, stderr = exec_command(
['dcos', 'subcommand', 'install', 'missing_file.whl'])
assert returncode == 1
assert stdout == b''
assert stderr.decode('utf-8').startswith(
'Failed to read file: No such file: ')
_list_subcommands(0)
def _list_subcommands(size):
returncode, stdout, stderr = exec_command(['dcos', 'subcommand', 'list'])
result = json.loads(stdout.decode('utf-8'))
assert returncode == 0
assert len(result) == size
assert stderr == b''
return result
def _install_subcommand(package):
returncode, stdout, stderr = exec_command(
['dcos', 'subcommand', 'install', package])
assert returncode == 0
assert stdout == b''
assert stderr == b''
def _uninstall_subcommand(package):
returncode, stdout, stderr = exec_command(
['dcos', 'subcommand', 'uninstall', package])
assert returncode == 0
assert stdout == b''
assert stderr == b''