From d8a0dcb5e6fdaacd70b85acc914e514c246eef0b Mon Sep 17 00:00:00 2001 From: Jose Idar Date: Tue, 6 Oct 2015 16:44:15 -0500 Subject: [PATCH] Modernize setup.py and add wheel support * Incremented version to 0.2.2 for pypi release. * Removed all post-install hooks. All initialization and configuration should be done through the cafe-config cli tool. * Added setup.cfg with support for universal bdist wheel. * Updated MANIFEST.in file. * Updated README.rst to reflect new install procedures. * Modified cafe-config so that initialization command is now just "cafe-config init". * Since the ".opencafe" directory is no longer initialized at install while access to the source code is guaranteed, the plugins are now distributed as package_data, and installed as such to site-packages under the new "plugins" directory within the "cafe" namespace. * The plugins directory is moved to the cafe package directory as package_data. * The plugin cache is no longer created at initialization, and all code relating to it in the cli.py and managers.py file has been removed. * Removed pip-requires file in favor of including the only requirement, 'six', in setup.py. The plan is to refactor so as to remove the dependency on six eventually. * Renamed test-requirements.txt to test-requires. * Added Authors.rst Change-Id: I28a605f926ae5f2d972a6a36171d0e4eb92cac09 --- AUTHORS.md | 21 +++ MANIFEST.in | 4 +- README.rst | 142 ++++++++++++------ cafe/configurator/cli.py | 67 ++++++--- cafe/configurator/managers.py | 38 +---- .../plugins}/elasticsearch/cafe/__init__.py | 0 .../elasticsearch/cafe/engine}/__init__.py | 0 .../cafe/engine/clients}/__init__.py | 0 .../cafe/engine/clients/elasticsearch.py | 0 .../plugins}/elasticsearch/setup.py | 0 .../plugins}/http/cafe/__init__.py | 0 .../plugins/http/cafe/engine}/__init__.py | 0 .../http/cafe/engine/clients}/__init__.py | 0 .../plugins}/http/cafe/engine/clients/rest.py | 0 .../http/cafe/engine/http}/__init__.py | 0 .../http/cafe/engine/http/behaviors.py | 0 .../plugins}/http/cafe/engine/http/client.py | 0 {plugins => cafe/plugins}/http/setup.py | 0 .../plugins}/http/test-requirements.txt | 0 .../plugins/http/tests/engine}/__init__.py | 0 .../http/tests/engine/http}/__init__.py | 0 .../http/tests/engine/http/test_behaviors.py | 0 {plugins => cafe/plugins}/http/tox.ini | 0 .../plugins}/mongo/cafe/__init__.py | 0 .../plugins/mongo/cafe/engine}/__init__.py | 0 .../mongo/cafe/engine/clients}/__init__.py | 0 .../mongo/cafe/engine/clients/mongo.py | 0 .../mongo/cafe/engine/mongo}/__init__.py | 0 .../mongo/cafe/engine/mongo/client.py | 0 {plugins => cafe/plugins}/mongo/setup.py | 0 .../plugins}/rsyslog/cafe/__init__.py | 0 .../rsyslog/cafe/resources}/__init__.py | 0 .../cafe/resources/rsyslog}/__init__.py | 0 .../rsyslog/cafe/resources/rsyslog/client.py | 0 {plugins => cafe/plugins}/rsyslog/setup.py | 0 .../plugins}/rsyslog/test-requirements.txt | 0 .../rsyslog/tests/resources}/__init__.py | 0 .../tests/resources/rsyslog}/__init__.py | 0 .../tests/resources/rsyslog/test_client.py | 0 {plugins => cafe/plugins}/rsyslog/tox.ini | 0 .../plugins}/skip_on_issue/cafe/__init__.py | 0 .../skip_on_issue/cafe/drivers}/__init__.py | 0 .../cafe/drivers/unittest}/__init__.py | 0 .../cafe/drivers/unittest/issue.py | 0 .../skip_on_issue/cafe/resources}/__init__.py | 0 .../cafe/resources/github}/__init__.py | 0 .../cafe/resources/github/config.py | 0 .../cafe/resources/github/issue_tracker.py | 0 .../cafe/resources/jira}/__init__.py | 0 .../cafe/resources/jira/config.py | 0 .../cafe/resources/jira/issue_tracker.py | 0 .../cafe/resources/launchpad}/__init__.py | 0 .../cafe/resources/launchpad/config.py | 0 .../cafe/resources/launchpad/issue_tracker.py | 0 .../plugins}/skip_on_issue/setup.py | 0 .../plugins}/soap/cafe/__init__.py | 0 .../plugins/soap/cafe/engine}/__init__.py | 0 .../soap/cafe/engine/soap}/__init__.py | 0 .../plugins}/soap/cafe/engine/soap/client.py | 0 {plugins => cafe/plugins}/soap/setup.py | 0 .../plugins}/soap/test-requirements.txt | 0 .../plugins/soap/tests}/__init__.py | 0 .../plugins/soap/tests/engine}/__init__.py | 0 .../soap/tests/engine/clients}/__init__.py | 0 .../soap/tests/engine/clients/test_soap.py | 0 {plugins => cafe/plugins}/soap/tox.ini | 0 .../plugins}/ssh/cafe/__init__.py | 0 .../plugins/ssh/cafe/engine}/__init__.py | 0 .../ssh/cafe/engine/clients}/__init__.py | 0 .../plugins}/ssh/cafe/engine/clients/ssh.py | 0 .../ssh/cafe/engine/models}/__init__.py | 0 .../ssh/cafe/engine/models/ssh_response.py | 0 .../plugins/ssh/cafe/engine/ssh}/__init__.py | 0 .../plugins}/ssh/cafe/engine/ssh/behaviors.py | 0 .../plugins}/ssh/cafe/engine/ssh/client.py | 0 .../plugins}/ssh/cafe/engine/ssh/config.py | 0 .../ssh/cafe/engine/ssh/models}/__init__.py | 0 .../cafe/engine/ssh/models/ssh_response.py | 0 {plugins => cafe/plugins}/ssh/setup.py | 0 .../plugins}/winrm/cafe/__init__.py | 0 .../plugins/winrm/cafe/engine}/__init__.py | 0 .../winrm/cafe/engine/clients}/__init__.py | 0 .../winrm/cafe/engine/clients/winrm_client.py | 0 .../winrm/cafe/engine/winrm}/__init__.py | 0 .../winrm/cafe/engine/winrm/client.py | 0 .../cafe/engine/winrm/models}/__init__.py | 0 .../engine/winrm/models/winrm_response.py | 0 {plugins => cafe/plugins}/winrm/setup.py | 0 pip-requires | 1 - plugins/winrm/cafe/engine/winrm/__init__.py | 0 .../cafe/engine/winrm/models/__init__.py | 0 setup.cfg | 2 + setup.py | 77 +++------- test-requirements.txt => test-requires | 3 +- tests/__init__.py | 0 tests/common/reporting/test_cclogging.py | 2 - tox.ini | 5 +- 97 files changed, 194 insertions(+), 168 deletions(-) rename {plugins => cafe/plugins}/elasticsearch/cafe/__init__.py (100%) rename {plugins => cafe/plugins/elasticsearch/cafe/engine}/__init__.py (100%) rename {plugins/elasticsearch/cafe/engine => cafe/plugins/elasticsearch/cafe/engine/clients}/__init__.py (100%) rename {plugins => cafe/plugins}/elasticsearch/cafe/engine/clients/elasticsearch.py (100%) rename {plugins => cafe/plugins}/elasticsearch/setup.py (100%) rename {plugins => cafe/plugins}/http/cafe/__init__.py (100%) rename {plugins/elasticsearch/cafe/engine/clients => cafe/plugins/http/cafe/engine}/__init__.py (100%) rename {plugins/http/cafe/engine => cafe/plugins/http/cafe/engine/clients}/__init__.py (100%) rename {plugins => cafe/plugins}/http/cafe/engine/clients/rest.py (100%) rename {plugins/http/cafe/engine/clients => cafe/plugins/http/cafe/engine/http}/__init__.py (100%) rename {plugins => cafe/plugins}/http/cafe/engine/http/behaviors.py (100%) rename {plugins => cafe/plugins}/http/cafe/engine/http/client.py (100%) rename {plugins => cafe/plugins}/http/setup.py (100%) rename {plugins => cafe/plugins}/http/test-requirements.txt (100%) rename {plugins/http/cafe/engine/http => cafe/plugins/http/tests/engine}/__init__.py (100%) rename {plugins/http/tests/engine => cafe/plugins/http/tests/engine/http}/__init__.py (100%) rename {plugins => cafe/plugins}/http/tests/engine/http/test_behaviors.py (100%) rename {plugins => cafe/plugins}/http/tox.ini (100%) rename {plugins => cafe/plugins}/mongo/cafe/__init__.py (100%) rename {plugins/http/tests/engine/http => cafe/plugins/mongo/cafe/engine}/__init__.py (100%) rename {plugins/mongo/cafe/engine => cafe/plugins/mongo/cafe/engine/clients}/__init__.py (100%) rename {plugins => cafe/plugins}/mongo/cafe/engine/clients/mongo.py (100%) rename {plugins/mongo/cafe/engine/clients => cafe/plugins/mongo/cafe/engine/mongo}/__init__.py (100%) rename {plugins => cafe/plugins}/mongo/cafe/engine/mongo/client.py (100%) rename {plugins => cafe/plugins}/mongo/setup.py (100%) rename {plugins => cafe/plugins}/rsyslog/cafe/__init__.py (100%) rename {plugins/mongo/cafe/engine/mongo => cafe/plugins/rsyslog/cafe/resources}/__init__.py (100%) rename {plugins/rsyslog/cafe/resources => cafe/plugins/rsyslog/cafe/resources/rsyslog}/__init__.py (100%) rename {plugins => cafe/plugins}/rsyslog/cafe/resources/rsyslog/client.py (100%) rename {plugins => cafe/plugins}/rsyslog/setup.py (100%) rename {plugins => cafe/plugins}/rsyslog/test-requirements.txt (100%) rename {plugins/rsyslog/cafe/resources/rsyslog => cafe/plugins/rsyslog/tests/resources}/__init__.py (100%) rename {plugins/rsyslog/tests/resources => cafe/plugins/rsyslog/tests/resources/rsyslog}/__init__.py (100%) rename {plugins => cafe/plugins}/rsyslog/tests/resources/rsyslog/test_client.py (100%) rename {plugins => cafe/plugins}/rsyslog/tox.ini (100%) rename {plugins => cafe/plugins}/skip_on_issue/cafe/__init__.py (100%) rename {plugins/rsyslog/tests/resources/rsyslog => cafe/plugins/skip_on_issue/cafe/drivers}/__init__.py (100%) rename {plugins/skip_on_issue/cafe/drivers => cafe/plugins/skip_on_issue/cafe/drivers/unittest}/__init__.py (100%) rename {plugins => cafe/plugins}/skip_on_issue/cafe/drivers/unittest/issue.py (100%) rename {plugins/skip_on_issue/cafe/drivers/unittest => cafe/plugins/skip_on_issue/cafe/resources}/__init__.py (100%) rename {plugins/skip_on_issue/cafe/resources => cafe/plugins/skip_on_issue/cafe/resources/github}/__init__.py (100%) rename {plugins => cafe/plugins}/skip_on_issue/cafe/resources/github/config.py (100%) rename {plugins => cafe/plugins}/skip_on_issue/cafe/resources/github/issue_tracker.py (100%) rename {plugins/skip_on_issue/cafe/resources/github => cafe/plugins/skip_on_issue/cafe/resources/jira}/__init__.py (100%) rename {plugins => cafe/plugins}/skip_on_issue/cafe/resources/jira/config.py (100%) rename {plugins => cafe/plugins}/skip_on_issue/cafe/resources/jira/issue_tracker.py (100%) rename {plugins/skip_on_issue/cafe/resources/jira => cafe/plugins/skip_on_issue/cafe/resources/launchpad}/__init__.py (100%) rename {plugins => cafe/plugins}/skip_on_issue/cafe/resources/launchpad/config.py (100%) rename {plugins => cafe/plugins}/skip_on_issue/cafe/resources/launchpad/issue_tracker.py (100%) rename {plugins => cafe/plugins}/skip_on_issue/setup.py (100%) rename {plugins => cafe/plugins}/soap/cafe/__init__.py (100%) rename {plugins/skip_on_issue/cafe/resources/launchpad => cafe/plugins/soap/cafe/engine}/__init__.py (100%) rename {plugins/soap/cafe/engine => cafe/plugins/soap/cafe/engine/soap}/__init__.py (100%) rename {plugins => cafe/plugins}/soap/cafe/engine/soap/client.py (100%) rename {plugins => cafe/plugins}/soap/setup.py (100%) rename {plugins => cafe/plugins}/soap/test-requirements.txt (100%) rename {plugins/soap/cafe/engine/soap => cafe/plugins/soap/tests}/__init__.py (100%) rename {plugins/soap/tests => cafe/plugins/soap/tests/engine}/__init__.py (100%) rename {plugins/soap/tests/engine => cafe/plugins/soap/tests/engine/clients}/__init__.py (100%) rename {plugins => cafe/plugins}/soap/tests/engine/clients/test_soap.py (100%) rename {plugins => cafe/plugins}/soap/tox.ini (100%) rename {plugins => cafe/plugins}/ssh/cafe/__init__.py (100%) rename {plugins/soap/tests/engine/clients => cafe/plugins/ssh/cafe/engine}/__init__.py (100%) rename {plugins/ssh/cafe/engine => cafe/plugins/ssh/cafe/engine/clients}/__init__.py (100%) rename {plugins => cafe/plugins}/ssh/cafe/engine/clients/ssh.py (100%) rename {plugins/ssh/cafe/engine/clients => cafe/plugins/ssh/cafe/engine/models}/__init__.py (100%) rename {plugins => cafe/plugins}/ssh/cafe/engine/models/ssh_response.py (100%) rename {plugins/ssh/cafe/engine/models => cafe/plugins/ssh/cafe/engine/ssh}/__init__.py (100%) rename {plugins => cafe/plugins}/ssh/cafe/engine/ssh/behaviors.py (100%) rename {plugins => cafe/plugins}/ssh/cafe/engine/ssh/client.py (100%) rename {plugins => cafe/plugins}/ssh/cafe/engine/ssh/config.py (100%) rename {plugins/ssh/cafe/engine/ssh => cafe/plugins/ssh/cafe/engine/ssh/models}/__init__.py (100%) rename {plugins => cafe/plugins}/ssh/cafe/engine/ssh/models/ssh_response.py (100%) rename {plugins => cafe/plugins}/ssh/setup.py (100%) rename {plugins => cafe/plugins}/winrm/cafe/__init__.py (100%) rename {plugins/ssh/cafe/engine/ssh/models => cafe/plugins/winrm/cafe/engine}/__init__.py (100%) rename {plugins/winrm => cafe/plugins/winrm/cafe/engine/clients}/__init__.py (100%) rename {plugins => cafe/plugins}/winrm/cafe/engine/clients/winrm_client.py (100%) rename {plugins/winrm/cafe/engine => cafe/plugins/winrm/cafe/engine/winrm}/__init__.py (100%) rename {plugins => cafe/plugins}/winrm/cafe/engine/winrm/client.py (100%) rename {plugins/winrm/cafe/engine/clients => cafe/plugins/winrm/cafe/engine/winrm/models}/__init__.py (100%) rename {plugins => cafe/plugins}/winrm/cafe/engine/winrm/models/winrm_response.py (100%) rename {plugins => cafe/plugins}/winrm/setup.py (100%) delete mode 100644 pip-requires delete mode 100644 plugins/winrm/cafe/engine/winrm/__init__.py delete mode 100644 plugins/winrm/cafe/engine/winrm/models/__init__.py create mode 100644 setup.cfg rename test-requirements.txt => test-requires (50%) delete mode 100644 tests/__init__.py diff --git a/AUTHORS.md b/AUTHORS.md index e69de29..b27d388 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -0,0 +1,21 @@ +Original Authors +---------------- +Sam Danes +Jose Idar +Brandon Logan +Carlos Martinez +Daryl Walleck + +Contributors +------------ +Anna Eilering +Richard Hawkins +Christopher Hunt +Michael Jackson +Melissa Kam +Malini Kamalambal +Stephen Lowrie +Leonardo Maycotte +Franklin Naval +Ivo Vasev +John Vrbanac diff --git a/MANIFEST.in b/MANIFEST.in index 7c623c5..12905cd 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,2 +1,2 @@ -include README.rst LICENSE pip-requires -recursive-include plugins * +include README.rst LICENSE +recursive-include cafe/plugins * diff --git a/README.rst b/README.rst index b19e48d..3fa9cc7 100644 --- a/README.rst +++ b/README.rst @@ -1,9 +1,7 @@ Open CAFE Core ----------------------------- +============== -.. code-block:: - ( ( ) ) ......... @@ -15,38 +13,114 @@ Open CAFE Core === CAFE Core === -The Open Common Automation Framework Engine is the core engine/driver used to build an automated testing framework. It is designed to be used as the -base engine for building an automated framework for API and non-UI resource testing. It is designed to support functional, integration and -reliability testing. The engine is **NOT** designed to support performance or load testing. +OpenCAFE, the Open Common Automation Framework Engine, is designed to be used +as the base for building an automated testing framework for API and other +(non-UI) testing. +It is designed to support all kinds of testing methodologies, such as unit, +functional and integration testing, using a model-based approach. +Although the engine is not designed with performance or load testing in mind, +as it prioritizes repeatability and (verbose) logging over performance, it can +be used to that end. -CAFE core provides a model, a pattern and assorted common tools for building automated tests. It provides its own light weight unittest based -runner, however, it is designed to be modular. It can be extended to support most test case front ends/runners (nose, pytest, lettuce, testr, etc...) -through driver plug-ins. + +Installation +============ +>Source code is available at https://github.com/stackforge/opencafe Supported Operating Systems --------------------------- -Open CAFE Core has been developed primarily in Linux and MAC environments, however, it supports installation and -execution on Windows +Open CAFE Core has been developed primarily on and for Linux, but supports +installation and execution on BSD and other *nix's, as well as OS X and +modern Windows. It can be installed from pypi via pip or from source. -Installation ------------- -Open CAFE Core can be `installed with pip `_ from the git repository after it is cloned to a local machine. +>**It is recommended that you install OpenCAFE in a python +virtualenv.** -* Clone this repository to your local machine -* CD to the root directory in your cloned repository. -* Run "pip install . --upgrade" and pip will auto install all dependencies. +via pip -After the CAFE Core is installed you will have command line access to the default unittest runner, the cafe-runner. (See cafe-runner --help for more info) + pip install opencafe -Remember, open CAFE is just the core driver/engine. You have to build an implementation and test repository that use it! +from source -Configuration + $ git clone https://github.com/stackforge/opencafe.git + $ cd opencafe + $ python setup.py install + +Post-install Configuration +========================== +Post-install, the ``cafe-config`` cli tool will become available. +It is used for installing +plugins and initializing the engine's default ``.opencafe`` directory. + +Initialization -------------- -Open CAFE works out of the box with the cafe-runner (cafe.drivers.unittest). CAFE will auto-generate a base engine.config during installation. This -base configuration will be installed to: /.opencafe/configs/engine.config +OpenCAFE uses a set of default locations for logging, storing +test configurations, test data, statistics, and the like; all of which are +set in, and read from, the ``engine.config`` file (in order to make it easy +for the end user to override the default behavior). The ``engine.config`` +file, and the directories it references, can be created on demand by running: -If you wish to modify default installation values you can update the engine.config file after CAFE installation. Keep in mind that the Engine will -over-write this file on installation/upgrade. +``cafe-config init`` + +> This will create a directory named ``.opencafe`` in the user's home +directory, or in the case of a python virtualenv, in the virtualenv root +folder. + +Installing Plugins +------------------ +The ``cafe-config plugins`` command is used to list and install plugins. + +Example: + + $ cafe-config plugins list + ================================= + * Available Plugins + ... http + ... mongo + ... winrm + ... elasticsearch + ... soap + ... skip_on_issue + ... rsyslog + ... ssh + ================================= + + $ cafe-config plugins install http + ================================= + * Installing Plugins + ... http + ================================= + +> Note: There is currently no way to reliably have an implementation of + OpenCAFE require specific plugins at install time, due to issues + with pip=>7.0.0. We are working on an overhaul of the plugin system + that should remedy the situation. + +Package Structure Overview +========================== +``cafe.common.reporting`` +------------------------- +Provides tools for logging and reporting. +This namespace should be used by plugins to add logging and reporting features. + +``cafe.configurator`` +--------------------- +Used by the ``cafe-config`` cli tool for setting up new installations of opencafe. + +``cafe.drivers`` +---------------- +Houses various test runner wrappers and supporting tools. +This namespace should be used by plugins to add new test runner support. + +``cafe.engine`` +--------------- +Includes the base classes that OpenCAFE implementations will use to create behaviors, configs, clients and models. +This namespace should be used by plugins to add new clients. + +``cafe.resources`` +------------------ +Deprecated. +Historically contained all modules that reference external resources to OpenCAFE. Currently acts only as a namespace for backward compatability with some plugins. Terminology ----------- @@ -58,7 +132,6 @@ Following are some notes on Open CAFE lingo and concepts. * Product Anything that's being tested by an implementation of Open CAFE Core. If you would like to see a refernce implementation, there is an `Open Source implementation `_ based on `OpenStack `_. - * Client / Client Method A **client** is an "at-least-one"-to-"at-most-one" mapping of a product's functionality to a collection of client methods. Using a `REST API `_ as an example, a client that represents that API in CAFE will contain at least one (but possibly more) method(s) for every function exposed by that API. Should a call in the API prove to be too difficult or cumbersome to define via a single **client method**, then multiple client methods can be defined such that as a whole they represent the complete set of that API call's functionality. A **client method** should never be a superset of more than one call's functionality. @@ -70,22 +143,3 @@ Following are some notes on Open CAFE lingo and concepts. * Provider This is meant to be a convenience facade that performs configuration of clients and behaviors to provide configuration-based default combinations of different clients and behaviors. - -Basic CAFE Package Anatomy --------------------------- -Below is a short description of the top level CAFE Packages. - -* cafe - This is the root package. The wellspring from which the CAFE flows... - -* common - Contains modules common the entire engine. This is the primary namespace for tools, data generators, common reporting classes, etc... - -* engine - Contains all the base implementations of clients, behaviors, models to be used by a CAFE implementation. It also contains supported generic clients, behaviors and models. For instance, the engine.clients.remote_instance clients are meant to be used directly by an implementation. - -* drivers - The end result of CAFE is to build an implementation to talk to a particular product or products, and a repository of automated test cases. The drivers package is specifically for building CAFE support for various Python based test runners. There is a default unittest based driver implemented which heavily extends the basic unittest functionality. Driver plug-ins can easily be constructed to add CAFE support for most of the popular ones already available (nose, pytest, lettuce, testr, etc...) or even for 100% custom test case drivers if desired. - -* resources - Contains all modules that reference external resources to OpenCAFE. One example of an external resource is a Launchpad tracker. diff --git a/cafe/configurator/cli.py b/cafe/configurator/cli.py index 9bdb010..90c00ec 100644 --- a/cafe/configurator/cli.py +++ b/cafe/configurator/cli.py @@ -18,8 +18,18 @@ from cafe.configurator.managers import ( class EngineActions(object): + class Init(object): + def __init__(self, args): + print("=================================") + print("* Initializing Engine Install") + EngineDirectoryManager.build_engine_directories() + EngineConfigManager.build_engine_config() + print("=================================") + class InitInstall(argparse.Action): - def __call__(self, parser, namespace, values, option_string=None): + def __call__( + self, parser, namespace, values, + option_string=None): print("=================================") print("* Initializing Engine Install") EngineDirectoryManager.build_engine_directories() @@ -28,22 +38,20 @@ class EngineActions(object): class PluginActions(object): - class AddPluginCache(argparse.Action): - def __call__(self, parser, namespace, values, option_string=None): - print("=================================") - print("* Adding Plugin Cache") - EnginePluginManager.populate_plugin_cache(values) - print("=================================") class InstallPlugin(argparse.Action): - def __call__(self, parser, namespace, values, option_string=None): + def __call__( + self, parser, namespace, values, + option_string=None): print("=================================") print("* Installing Plugins") EnginePluginManager.install_plugins(values) print("=================================") class ListPlugins(argparse.Action): - def __call__(self, parser, namespace, values, option_string=None): + def __call__( + self, parser, namespace, values, + option_string=None): print("=================================") print("* Available Plugins") EnginePluginManager.list_plugins() @@ -51,7 +59,8 @@ class PluginActions(object): class ConfiguratorCLI(object): - """CLI for future engine management and configuration options.""" + """CLI for future engine management and configuration + options.""" @classmethod def run(cls): @@ -59,28 +68,42 @@ class ConfiguratorCLI(object): subparsers = parser.add_subparsers(dest="subcommand") # Engine configuration subparser - subparser_engine_config = subparsers.add_parser('engine') + subparser_engine_config = subparsers.add_parser( + 'engine') subparser_engine_config.add_argument( - '--init-install', action=EngineActions.InitInstall, nargs=0) + '--init-install', + action=EngineActions.InitInstall, + nargs=0, + help="Deprecated. Please use 'cafe-config init' instead.") + + subparser_init = subparsers.add_parser('init') + subparser_init.set_defaults(func=EngineActions.Init) # Plugin argument subparser subparser_plugins = subparsers.add_parser('plugins') - plugin_args = subparser_plugins.add_subparsers(dest='plugin_args') + plugin_args = subparser_plugins.add_subparsers( + dest='plugin_args') - plugins_add_parser = plugin_args.add_parser('add') - plugins_add_parser.add_argument( - 'plugin_dir', action=PluginActions.AddPluginCache, type=str) - - plugins_add_parser = plugin_args.add_parser('list') - plugins_add_parser.add_argument( - 'list_plugins', action=PluginActions.ListPlugins, nargs=0) + plugins_list_parser = plugin_args.add_parser('list') + plugins_list_parser.add_argument( + 'list_plugins', + action=PluginActions.ListPlugins, + nargs=0) plugins_install_parser = plugin_args.add_parser('install') plugins_install_parser.add_argument( - 'plugin-name', action=PluginActions.InstallPlugin, type=str, + 'plugin-name', + action=PluginActions.InstallPlugin, + type=str, nargs='*') - return parser.parse_args() + # parse args and trigger actions + args = parser.parse_args() + + try: + args.func(args) + except AttributeError: + return args def entry_point(): diff --git a/cafe/configurator/managers.py b/cafe/configurator/managers.py index f691305..df1f353 100644 --- a/cafe/configurator/managers.py +++ b/cafe/configurator/managers.py @@ -21,11 +21,10 @@ import textwrap import getpass import shutil from subprocess import Popen, PIPE - from six.moves.configparser import SafeConfigParser -from cafe.engine.config import EngineConfig import cafe +from cafe.engine.config import EngineConfig if not platform.system().lower() == 'windows': import pwd @@ -408,8 +407,7 @@ class EngineDirectoryManager(object): LOG_DIR=os.path.join(OPENCAFE_ROOT_DIR, 'logs'), DATA_DIR=os.path.join(OPENCAFE_ROOT_DIR, 'data'), TEMP_DIR=os.path.join(OPENCAFE_ROOT_DIR, 'temp'), - CONFIG_DIR=os.path.join(OPENCAFE_ROOT_DIR, 'configs'), - PLUGIN_CACHE=os.path.join(OPENCAFE_ROOT_DIR, 'plugin_cache')) + CONFIG_DIR=os.path.join(OPENCAFE_ROOT_DIR, 'configs'),) @classmethod def create_engine_directories(cls): @@ -612,38 +610,13 @@ class EngineConfigManager(object): class EnginePluginManager(object): - - @classmethod - def copy_plugin_to_cache( - cls, plugins_src_dir, plugins_dest_dir, plugin_name): - """ Copies an individual plugin to the .opencafe plugin cache """ - src_plugin_path = os.path.join(plugins_src_dir, plugin_name) - dest_plugin_path = os.path.join(plugins_dest_dir, plugin_name) - - if os.path.exists(dest_plugin_path): - shutil.rmtree(dest_plugin_path) - - shutil.copytree(src_plugin_path, dest_plugin_path) - - @classmethod - def populate_plugin_cache(cls, plugins_src_dir): - """ Handles moving all plugin src data from package into the user's - .opencafe folder for installation by the cafe-config tool. - """ - - default_dest = EngineDirectoryManager.OPENCAFE_SUB_DIRS.PLUGIN_CACHE - plugins = next(os.walk(plugins_src_dir))[1] - - for plugin_name in plugins: - cls.copy_plugin_to_cache( - plugins_src_dir, default_dest, plugin_name) + _PLUGIN_DIR = os.path.join(os.path.dirname(cafe.__file__), 'plugins') @classmethod def list_plugins(cls): """ Lists all plugins currently available in user's .opencafe cache""" - plugin_cache = EngineDirectoryManager.OPENCAFE_SUB_DIRS.PLUGIN_CACHE - plugin_folders = os.walk(plugin_cache).next()[1] + plugin_folders = os.walk(cls._PLUGIN_DIR).next()[1] wrap = textwrap.TextWrapper(initial_indent=" ", subsequent_indent=" ", break_long_words=False).fill @@ -664,8 +637,7 @@ class EnginePluginManager(object): def install_plugin(cls, plugin_name): """ Install a single plugin by name into the current environment""" - plugin_cache = EngineDirectoryManager.OPENCAFE_SUB_DIRS.PLUGIN_CACHE - plugin_dir = os.path.join(plugin_cache, plugin_name) + plugin_dir = os.path.join(cls._PLUGIN_DIR, plugin_name) wrap = textwrap.TextWrapper(initial_indent=" ", subsequent_indent=" ", break_long_words=False).fill diff --git a/plugins/elasticsearch/cafe/__init__.py b/cafe/plugins/elasticsearch/cafe/__init__.py similarity index 100% rename from plugins/elasticsearch/cafe/__init__.py rename to cafe/plugins/elasticsearch/cafe/__init__.py diff --git a/plugins/__init__.py b/cafe/plugins/elasticsearch/cafe/engine/__init__.py similarity index 100% rename from plugins/__init__.py rename to cafe/plugins/elasticsearch/cafe/engine/__init__.py diff --git a/plugins/elasticsearch/cafe/engine/__init__.py b/cafe/plugins/elasticsearch/cafe/engine/clients/__init__.py similarity index 100% rename from plugins/elasticsearch/cafe/engine/__init__.py rename to cafe/plugins/elasticsearch/cafe/engine/clients/__init__.py diff --git a/plugins/elasticsearch/cafe/engine/clients/elasticsearch.py b/cafe/plugins/elasticsearch/cafe/engine/clients/elasticsearch.py similarity index 100% rename from plugins/elasticsearch/cafe/engine/clients/elasticsearch.py rename to cafe/plugins/elasticsearch/cafe/engine/clients/elasticsearch.py diff --git a/plugins/elasticsearch/setup.py b/cafe/plugins/elasticsearch/setup.py similarity index 100% rename from plugins/elasticsearch/setup.py rename to cafe/plugins/elasticsearch/setup.py diff --git a/plugins/http/cafe/__init__.py b/cafe/plugins/http/cafe/__init__.py similarity index 100% rename from plugins/http/cafe/__init__.py rename to cafe/plugins/http/cafe/__init__.py diff --git a/plugins/elasticsearch/cafe/engine/clients/__init__.py b/cafe/plugins/http/cafe/engine/__init__.py similarity index 100% rename from plugins/elasticsearch/cafe/engine/clients/__init__.py rename to cafe/plugins/http/cafe/engine/__init__.py diff --git a/plugins/http/cafe/engine/__init__.py b/cafe/plugins/http/cafe/engine/clients/__init__.py similarity index 100% rename from plugins/http/cafe/engine/__init__.py rename to cafe/plugins/http/cafe/engine/clients/__init__.py diff --git a/plugins/http/cafe/engine/clients/rest.py b/cafe/plugins/http/cafe/engine/clients/rest.py similarity index 100% rename from plugins/http/cafe/engine/clients/rest.py rename to cafe/plugins/http/cafe/engine/clients/rest.py diff --git a/plugins/http/cafe/engine/clients/__init__.py b/cafe/plugins/http/cafe/engine/http/__init__.py similarity index 100% rename from plugins/http/cafe/engine/clients/__init__.py rename to cafe/plugins/http/cafe/engine/http/__init__.py diff --git a/plugins/http/cafe/engine/http/behaviors.py b/cafe/plugins/http/cafe/engine/http/behaviors.py similarity index 100% rename from plugins/http/cafe/engine/http/behaviors.py rename to cafe/plugins/http/cafe/engine/http/behaviors.py diff --git a/plugins/http/cafe/engine/http/client.py b/cafe/plugins/http/cafe/engine/http/client.py similarity index 100% rename from plugins/http/cafe/engine/http/client.py rename to cafe/plugins/http/cafe/engine/http/client.py diff --git a/plugins/http/setup.py b/cafe/plugins/http/setup.py similarity index 100% rename from plugins/http/setup.py rename to cafe/plugins/http/setup.py diff --git a/plugins/http/test-requirements.txt b/cafe/plugins/http/test-requirements.txt similarity index 100% rename from plugins/http/test-requirements.txt rename to cafe/plugins/http/test-requirements.txt diff --git a/plugins/http/cafe/engine/http/__init__.py b/cafe/plugins/http/tests/engine/__init__.py similarity index 100% rename from plugins/http/cafe/engine/http/__init__.py rename to cafe/plugins/http/tests/engine/__init__.py diff --git a/plugins/http/tests/engine/__init__.py b/cafe/plugins/http/tests/engine/http/__init__.py similarity index 100% rename from plugins/http/tests/engine/__init__.py rename to cafe/plugins/http/tests/engine/http/__init__.py diff --git a/plugins/http/tests/engine/http/test_behaviors.py b/cafe/plugins/http/tests/engine/http/test_behaviors.py similarity index 100% rename from plugins/http/tests/engine/http/test_behaviors.py rename to cafe/plugins/http/tests/engine/http/test_behaviors.py diff --git a/plugins/http/tox.ini b/cafe/plugins/http/tox.ini similarity index 100% rename from plugins/http/tox.ini rename to cafe/plugins/http/tox.ini diff --git a/plugins/mongo/cafe/__init__.py b/cafe/plugins/mongo/cafe/__init__.py similarity index 100% rename from plugins/mongo/cafe/__init__.py rename to cafe/plugins/mongo/cafe/__init__.py diff --git a/plugins/http/tests/engine/http/__init__.py b/cafe/plugins/mongo/cafe/engine/__init__.py similarity index 100% rename from plugins/http/tests/engine/http/__init__.py rename to cafe/plugins/mongo/cafe/engine/__init__.py diff --git a/plugins/mongo/cafe/engine/__init__.py b/cafe/plugins/mongo/cafe/engine/clients/__init__.py similarity index 100% rename from plugins/mongo/cafe/engine/__init__.py rename to cafe/plugins/mongo/cafe/engine/clients/__init__.py diff --git a/plugins/mongo/cafe/engine/clients/mongo.py b/cafe/plugins/mongo/cafe/engine/clients/mongo.py similarity index 100% rename from plugins/mongo/cafe/engine/clients/mongo.py rename to cafe/plugins/mongo/cafe/engine/clients/mongo.py diff --git a/plugins/mongo/cafe/engine/clients/__init__.py b/cafe/plugins/mongo/cafe/engine/mongo/__init__.py similarity index 100% rename from plugins/mongo/cafe/engine/clients/__init__.py rename to cafe/plugins/mongo/cafe/engine/mongo/__init__.py diff --git a/plugins/mongo/cafe/engine/mongo/client.py b/cafe/plugins/mongo/cafe/engine/mongo/client.py similarity index 100% rename from plugins/mongo/cafe/engine/mongo/client.py rename to cafe/plugins/mongo/cafe/engine/mongo/client.py diff --git a/plugins/mongo/setup.py b/cafe/plugins/mongo/setup.py similarity index 100% rename from plugins/mongo/setup.py rename to cafe/plugins/mongo/setup.py diff --git a/plugins/rsyslog/cafe/__init__.py b/cafe/plugins/rsyslog/cafe/__init__.py similarity index 100% rename from plugins/rsyslog/cafe/__init__.py rename to cafe/plugins/rsyslog/cafe/__init__.py diff --git a/plugins/mongo/cafe/engine/mongo/__init__.py b/cafe/plugins/rsyslog/cafe/resources/__init__.py similarity index 100% rename from plugins/mongo/cafe/engine/mongo/__init__.py rename to cafe/plugins/rsyslog/cafe/resources/__init__.py diff --git a/plugins/rsyslog/cafe/resources/__init__.py b/cafe/plugins/rsyslog/cafe/resources/rsyslog/__init__.py similarity index 100% rename from plugins/rsyslog/cafe/resources/__init__.py rename to cafe/plugins/rsyslog/cafe/resources/rsyslog/__init__.py diff --git a/plugins/rsyslog/cafe/resources/rsyslog/client.py b/cafe/plugins/rsyslog/cafe/resources/rsyslog/client.py similarity index 100% rename from plugins/rsyslog/cafe/resources/rsyslog/client.py rename to cafe/plugins/rsyslog/cafe/resources/rsyslog/client.py diff --git a/plugins/rsyslog/setup.py b/cafe/plugins/rsyslog/setup.py similarity index 100% rename from plugins/rsyslog/setup.py rename to cafe/plugins/rsyslog/setup.py diff --git a/plugins/rsyslog/test-requirements.txt b/cafe/plugins/rsyslog/test-requirements.txt similarity index 100% rename from plugins/rsyslog/test-requirements.txt rename to cafe/plugins/rsyslog/test-requirements.txt diff --git a/plugins/rsyslog/cafe/resources/rsyslog/__init__.py b/cafe/plugins/rsyslog/tests/resources/__init__.py similarity index 100% rename from plugins/rsyslog/cafe/resources/rsyslog/__init__.py rename to cafe/plugins/rsyslog/tests/resources/__init__.py diff --git a/plugins/rsyslog/tests/resources/__init__.py b/cafe/plugins/rsyslog/tests/resources/rsyslog/__init__.py similarity index 100% rename from plugins/rsyslog/tests/resources/__init__.py rename to cafe/plugins/rsyslog/tests/resources/rsyslog/__init__.py diff --git a/plugins/rsyslog/tests/resources/rsyslog/test_client.py b/cafe/plugins/rsyslog/tests/resources/rsyslog/test_client.py similarity index 100% rename from plugins/rsyslog/tests/resources/rsyslog/test_client.py rename to cafe/plugins/rsyslog/tests/resources/rsyslog/test_client.py diff --git a/plugins/rsyslog/tox.ini b/cafe/plugins/rsyslog/tox.ini similarity index 100% rename from plugins/rsyslog/tox.ini rename to cafe/plugins/rsyslog/tox.ini diff --git a/plugins/skip_on_issue/cafe/__init__.py b/cafe/plugins/skip_on_issue/cafe/__init__.py similarity index 100% rename from plugins/skip_on_issue/cafe/__init__.py rename to cafe/plugins/skip_on_issue/cafe/__init__.py diff --git a/plugins/rsyslog/tests/resources/rsyslog/__init__.py b/cafe/plugins/skip_on_issue/cafe/drivers/__init__.py similarity index 100% rename from plugins/rsyslog/tests/resources/rsyslog/__init__.py rename to cafe/plugins/skip_on_issue/cafe/drivers/__init__.py diff --git a/plugins/skip_on_issue/cafe/drivers/__init__.py b/cafe/plugins/skip_on_issue/cafe/drivers/unittest/__init__.py similarity index 100% rename from plugins/skip_on_issue/cafe/drivers/__init__.py rename to cafe/plugins/skip_on_issue/cafe/drivers/unittest/__init__.py diff --git a/plugins/skip_on_issue/cafe/drivers/unittest/issue.py b/cafe/plugins/skip_on_issue/cafe/drivers/unittest/issue.py similarity index 100% rename from plugins/skip_on_issue/cafe/drivers/unittest/issue.py rename to cafe/plugins/skip_on_issue/cafe/drivers/unittest/issue.py diff --git a/plugins/skip_on_issue/cafe/drivers/unittest/__init__.py b/cafe/plugins/skip_on_issue/cafe/resources/__init__.py similarity index 100% rename from plugins/skip_on_issue/cafe/drivers/unittest/__init__.py rename to cafe/plugins/skip_on_issue/cafe/resources/__init__.py diff --git a/plugins/skip_on_issue/cafe/resources/__init__.py b/cafe/plugins/skip_on_issue/cafe/resources/github/__init__.py similarity index 100% rename from plugins/skip_on_issue/cafe/resources/__init__.py rename to cafe/plugins/skip_on_issue/cafe/resources/github/__init__.py diff --git a/plugins/skip_on_issue/cafe/resources/github/config.py b/cafe/plugins/skip_on_issue/cafe/resources/github/config.py similarity index 100% rename from plugins/skip_on_issue/cafe/resources/github/config.py rename to cafe/plugins/skip_on_issue/cafe/resources/github/config.py diff --git a/plugins/skip_on_issue/cafe/resources/github/issue_tracker.py b/cafe/plugins/skip_on_issue/cafe/resources/github/issue_tracker.py similarity index 100% rename from plugins/skip_on_issue/cafe/resources/github/issue_tracker.py rename to cafe/plugins/skip_on_issue/cafe/resources/github/issue_tracker.py diff --git a/plugins/skip_on_issue/cafe/resources/github/__init__.py b/cafe/plugins/skip_on_issue/cafe/resources/jira/__init__.py similarity index 100% rename from plugins/skip_on_issue/cafe/resources/github/__init__.py rename to cafe/plugins/skip_on_issue/cafe/resources/jira/__init__.py diff --git a/plugins/skip_on_issue/cafe/resources/jira/config.py b/cafe/plugins/skip_on_issue/cafe/resources/jira/config.py similarity index 100% rename from plugins/skip_on_issue/cafe/resources/jira/config.py rename to cafe/plugins/skip_on_issue/cafe/resources/jira/config.py diff --git a/plugins/skip_on_issue/cafe/resources/jira/issue_tracker.py b/cafe/plugins/skip_on_issue/cafe/resources/jira/issue_tracker.py similarity index 100% rename from plugins/skip_on_issue/cafe/resources/jira/issue_tracker.py rename to cafe/plugins/skip_on_issue/cafe/resources/jira/issue_tracker.py diff --git a/plugins/skip_on_issue/cafe/resources/jira/__init__.py b/cafe/plugins/skip_on_issue/cafe/resources/launchpad/__init__.py similarity index 100% rename from plugins/skip_on_issue/cafe/resources/jira/__init__.py rename to cafe/plugins/skip_on_issue/cafe/resources/launchpad/__init__.py diff --git a/plugins/skip_on_issue/cafe/resources/launchpad/config.py b/cafe/plugins/skip_on_issue/cafe/resources/launchpad/config.py similarity index 100% rename from plugins/skip_on_issue/cafe/resources/launchpad/config.py rename to cafe/plugins/skip_on_issue/cafe/resources/launchpad/config.py diff --git a/plugins/skip_on_issue/cafe/resources/launchpad/issue_tracker.py b/cafe/plugins/skip_on_issue/cafe/resources/launchpad/issue_tracker.py similarity index 100% rename from plugins/skip_on_issue/cafe/resources/launchpad/issue_tracker.py rename to cafe/plugins/skip_on_issue/cafe/resources/launchpad/issue_tracker.py diff --git a/plugins/skip_on_issue/setup.py b/cafe/plugins/skip_on_issue/setup.py similarity index 100% rename from plugins/skip_on_issue/setup.py rename to cafe/plugins/skip_on_issue/setup.py diff --git a/plugins/soap/cafe/__init__.py b/cafe/plugins/soap/cafe/__init__.py similarity index 100% rename from plugins/soap/cafe/__init__.py rename to cafe/plugins/soap/cafe/__init__.py diff --git a/plugins/skip_on_issue/cafe/resources/launchpad/__init__.py b/cafe/plugins/soap/cafe/engine/__init__.py similarity index 100% rename from plugins/skip_on_issue/cafe/resources/launchpad/__init__.py rename to cafe/plugins/soap/cafe/engine/__init__.py diff --git a/plugins/soap/cafe/engine/__init__.py b/cafe/plugins/soap/cafe/engine/soap/__init__.py similarity index 100% rename from plugins/soap/cafe/engine/__init__.py rename to cafe/plugins/soap/cafe/engine/soap/__init__.py diff --git a/plugins/soap/cafe/engine/soap/client.py b/cafe/plugins/soap/cafe/engine/soap/client.py similarity index 100% rename from plugins/soap/cafe/engine/soap/client.py rename to cafe/plugins/soap/cafe/engine/soap/client.py diff --git a/plugins/soap/setup.py b/cafe/plugins/soap/setup.py similarity index 100% rename from plugins/soap/setup.py rename to cafe/plugins/soap/setup.py diff --git a/plugins/soap/test-requirements.txt b/cafe/plugins/soap/test-requirements.txt similarity index 100% rename from plugins/soap/test-requirements.txt rename to cafe/plugins/soap/test-requirements.txt diff --git a/plugins/soap/cafe/engine/soap/__init__.py b/cafe/plugins/soap/tests/__init__.py similarity index 100% rename from plugins/soap/cafe/engine/soap/__init__.py rename to cafe/plugins/soap/tests/__init__.py diff --git a/plugins/soap/tests/__init__.py b/cafe/plugins/soap/tests/engine/__init__.py similarity index 100% rename from plugins/soap/tests/__init__.py rename to cafe/plugins/soap/tests/engine/__init__.py diff --git a/plugins/soap/tests/engine/__init__.py b/cafe/plugins/soap/tests/engine/clients/__init__.py similarity index 100% rename from plugins/soap/tests/engine/__init__.py rename to cafe/plugins/soap/tests/engine/clients/__init__.py diff --git a/plugins/soap/tests/engine/clients/test_soap.py b/cafe/plugins/soap/tests/engine/clients/test_soap.py similarity index 100% rename from plugins/soap/tests/engine/clients/test_soap.py rename to cafe/plugins/soap/tests/engine/clients/test_soap.py diff --git a/plugins/soap/tox.ini b/cafe/plugins/soap/tox.ini similarity index 100% rename from plugins/soap/tox.ini rename to cafe/plugins/soap/tox.ini diff --git a/plugins/ssh/cafe/__init__.py b/cafe/plugins/ssh/cafe/__init__.py similarity index 100% rename from plugins/ssh/cafe/__init__.py rename to cafe/plugins/ssh/cafe/__init__.py diff --git a/plugins/soap/tests/engine/clients/__init__.py b/cafe/plugins/ssh/cafe/engine/__init__.py similarity index 100% rename from plugins/soap/tests/engine/clients/__init__.py rename to cafe/plugins/ssh/cafe/engine/__init__.py diff --git a/plugins/ssh/cafe/engine/__init__.py b/cafe/plugins/ssh/cafe/engine/clients/__init__.py similarity index 100% rename from plugins/ssh/cafe/engine/__init__.py rename to cafe/plugins/ssh/cafe/engine/clients/__init__.py diff --git a/plugins/ssh/cafe/engine/clients/ssh.py b/cafe/plugins/ssh/cafe/engine/clients/ssh.py similarity index 100% rename from plugins/ssh/cafe/engine/clients/ssh.py rename to cafe/plugins/ssh/cafe/engine/clients/ssh.py diff --git a/plugins/ssh/cafe/engine/clients/__init__.py b/cafe/plugins/ssh/cafe/engine/models/__init__.py similarity index 100% rename from plugins/ssh/cafe/engine/clients/__init__.py rename to cafe/plugins/ssh/cafe/engine/models/__init__.py diff --git a/plugins/ssh/cafe/engine/models/ssh_response.py b/cafe/plugins/ssh/cafe/engine/models/ssh_response.py similarity index 100% rename from plugins/ssh/cafe/engine/models/ssh_response.py rename to cafe/plugins/ssh/cafe/engine/models/ssh_response.py diff --git a/plugins/ssh/cafe/engine/models/__init__.py b/cafe/plugins/ssh/cafe/engine/ssh/__init__.py similarity index 100% rename from plugins/ssh/cafe/engine/models/__init__.py rename to cafe/plugins/ssh/cafe/engine/ssh/__init__.py diff --git a/plugins/ssh/cafe/engine/ssh/behaviors.py b/cafe/plugins/ssh/cafe/engine/ssh/behaviors.py similarity index 100% rename from plugins/ssh/cafe/engine/ssh/behaviors.py rename to cafe/plugins/ssh/cafe/engine/ssh/behaviors.py diff --git a/plugins/ssh/cafe/engine/ssh/client.py b/cafe/plugins/ssh/cafe/engine/ssh/client.py similarity index 100% rename from plugins/ssh/cafe/engine/ssh/client.py rename to cafe/plugins/ssh/cafe/engine/ssh/client.py diff --git a/plugins/ssh/cafe/engine/ssh/config.py b/cafe/plugins/ssh/cafe/engine/ssh/config.py similarity index 100% rename from plugins/ssh/cafe/engine/ssh/config.py rename to cafe/plugins/ssh/cafe/engine/ssh/config.py diff --git a/plugins/ssh/cafe/engine/ssh/__init__.py b/cafe/plugins/ssh/cafe/engine/ssh/models/__init__.py similarity index 100% rename from plugins/ssh/cafe/engine/ssh/__init__.py rename to cafe/plugins/ssh/cafe/engine/ssh/models/__init__.py diff --git a/plugins/ssh/cafe/engine/ssh/models/ssh_response.py b/cafe/plugins/ssh/cafe/engine/ssh/models/ssh_response.py similarity index 100% rename from plugins/ssh/cafe/engine/ssh/models/ssh_response.py rename to cafe/plugins/ssh/cafe/engine/ssh/models/ssh_response.py diff --git a/plugins/ssh/setup.py b/cafe/plugins/ssh/setup.py similarity index 100% rename from plugins/ssh/setup.py rename to cafe/plugins/ssh/setup.py diff --git a/plugins/winrm/cafe/__init__.py b/cafe/plugins/winrm/cafe/__init__.py similarity index 100% rename from plugins/winrm/cafe/__init__.py rename to cafe/plugins/winrm/cafe/__init__.py diff --git a/plugins/ssh/cafe/engine/ssh/models/__init__.py b/cafe/plugins/winrm/cafe/engine/__init__.py similarity index 100% rename from plugins/ssh/cafe/engine/ssh/models/__init__.py rename to cafe/plugins/winrm/cafe/engine/__init__.py diff --git a/plugins/winrm/__init__.py b/cafe/plugins/winrm/cafe/engine/clients/__init__.py similarity index 100% rename from plugins/winrm/__init__.py rename to cafe/plugins/winrm/cafe/engine/clients/__init__.py diff --git a/plugins/winrm/cafe/engine/clients/winrm_client.py b/cafe/plugins/winrm/cafe/engine/clients/winrm_client.py similarity index 100% rename from plugins/winrm/cafe/engine/clients/winrm_client.py rename to cafe/plugins/winrm/cafe/engine/clients/winrm_client.py diff --git a/plugins/winrm/cafe/engine/__init__.py b/cafe/plugins/winrm/cafe/engine/winrm/__init__.py similarity index 100% rename from plugins/winrm/cafe/engine/__init__.py rename to cafe/plugins/winrm/cafe/engine/winrm/__init__.py diff --git a/plugins/winrm/cafe/engine/winrm/client.py b/cafe/plugins/winrm/cafe/engine/winrm/client.py similarity index 100% rename from plugins/winrm/cafe/engine/winrm/client.py rename to cafe/plugins/winrm/cafe/engine/winrm/client.py diff --git a/plugins/winrm/cafe/engine/clients/__init__.py b/cafe/plugins/winrm/cafe/engine/winrm/models/__init__.py similarity index 100% rename from plugins/winrm/cafe/engine/clients/__init__.py rename to cafe/plugins/winrm/cafe/engine/winrm/models/__init__.py diff --git a/plugins/winrm/cafe/engine/winrm/models/winrm_response.py b/cafe/plugins/winrm/cafe/engine/winrm/models/winrm_response.py similarity index 100% rename from plugins/winrm/cafe/engine/winrm/models/winrm_response.py rename to cafe/plugins/winrm/cafe/engine/winrm/models/winrm_response.py diff --git a/plugins/winrm/setup.py b/cafe/plugins/winrm/setup.py similarity index 100% rename from plugins/winrm/setup.py rename to cafe/plugins/winrm/setup.py diff --git a/pip-requires b/pip-requires deleted file mode 100644 index 64c56a3..0000000 --- a/pip-requires +++ /dev/null @@ -1 +0,0 @@ -six \ No newline at end of file diff --git a/plugins/winrm/cafe/engine/winrm/__init__.py b/plugins/winrm/cafe/engine/winrm/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/plugins/winrm/cafe/engine/winrm/models/__init__.py b/plugins/winrm/cafe/engine/winrm/models/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..3c6e79c --- /dev/null +++ b/setup.cfg @@ -0,0 +1,2 @@ +[bdist_wheel] +universal=1 diff --git a/setup.py b/setup.py index 50c32e5..670f1ba 100644 --- a/setup.py +++ b/setup.py @@ -14,62 +14,12 @@ See the License for the specific language governing permissions and limitations under the License. """ +import os import sys -from subprocess import call from setuptools import setup, find_packages -from setuptools.command import easy_install as _easy_install -from setuptools.command.install import install as _install from setuptools.command.test import test as TestCommand -# Post-install engine configuration -def _post_install(dir): - call(['cafe-config', 'engine', '--init-install']) - call(['cafe-config', 'plugins', 'add', 'plugins']) - call(['cafe-config', 'plugins', 'install', 'http']) - print( - """ - ( ( - ) ) - ........ - | |___ - | |_ | - | :-) |_| | - | |___| - |______| - === OpenCAFE === - - ----------------------------------------------------------------- - If you wish to install additional plugins, you can do so through - the cafe-config tool. - - Example: - $ cafe-config plugins install mongo - ----------------------------------------------------------------- - """) - -# Read in requirements -requires = open('pip-requires').readlines() - -# Add additional requires for Python 2.6 support -if sys.version_info < (2, 7): - oldpy_requires = ['argparse>=1.2.1', 'unittest2>=0.5.1', 'ordereddict'] - requires.extend(oldpy_requires) - - -# cmdclass hook allows setup to make post install call -class install(_install): - def run(self): - - # Workaround for problem in six that prevents installation when part of - # of some package requirements - _easy_install.main(['-U', 'six']) - _install.run(self) - self.execute( - _post_install, (self.install_lib,), - msg="\nRunning post install tasks...") - - # tox integration class Tox(TestCommand): def finalize_options(self): @@ -83,20 +33,29 @@ class Tox(TestCommand): errno = tox.cmdline(self.test_args) sys.exit(errno) -# Normal setup stuff +# Package the plugin cache as package data +plugins = [] +dir_path = os.path.join(os.path.dirname(__file__), 'cafe', 'plugins') +for dirpath, directories, filenames in os.walk(dir_path): + dirpath = dirpath.lstrip('cafe/') + for f in filenames: + if f.endswith('.pyc'): + continue + target_file = os.path.join(dirpath, f) + plugins.append(target_file) + setup( name='opencafe', - version='0.2.1', + version='0.2.2', description='The Common Automation Framework Engine', long_description='{0}'.format(open('README.rst').read()), author='CafeHub', author_email='cloud-cafe@lists.rackspace.com', url='http://opencafe.readthedocs.org', - install_requires=requires, - packages=find_packages(), - namespace_packages=['cafe'], + install_requires=['six'], + packages=find_packages(exclude=('tests*', 'docs')), + package_data={'cafe': plugins}, license=open('LICENSE').read(), - zip_safe=False, classifiers=( 'Development Status :: 4 - Beta', 'Intended Audience :: Developers', @@ -115,6 +74,4 @@ setup( 'specter-runner = cafe.drivers.specter.runner:entry_point', 'cafe-config = cafe.configurator.cli:entry_point']}, tests_require=['tox'], - cmdclass={ - 'install': install, - 'test': Tox}) + cmdclass={'test': Tox}) diff --git a/test-requirements.txt b/test-requires similarity index 50% rename from test-requirements.txt rename to test-requires index 6e643c4..1120c61 100644 --- a/test-requirements.txt +++ b/test-requires @@ -1,4 +1,5 @@ tox mock flake8 -nose \ No newline at end of file +nose +virtualenv diff --git a/tests/__init__.py b/tests/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/tests/common/reporting/test_cclogging.py b/tests/common/reporting/test_cclogging.py index 0352383..a6be84f 100644 --- a/tests/common/reporting/test_cclogging.py +++ b/tests/common/reporting/test_cclogging.py @@ -1,10 +1,8 @@ import unittest import mock from uuid import uuid4 -from requests import Response import logging from cafe.common.reporting.cclogging import getLogger as CC_getLogger -from cafe.common.reporting.cclogging import init_root_log_handler as IRLH mock_dict = dict( CAFE_TEST_LOG_PATH='/tmp', diff --git a/tox.ini b/tox.ini index d1fb846..60a3075 100644 --- a/tox.ini +++ b/tox.ini @@ -3,8 +3,7 @@ envlist=pep8,py27,py34 [testenv] setenv=VIRTUAL_ENV={envdir} -deps=-r{toxinidir}/pip-requires - -r{toxinidir}/test-requirements.txt +deps=-r{toxinidir}/test-requires [testenv:py27] commands=nosetests @@ -17,4 +16,4 @@ commands=flake8 [flake8] ignore=F401,E402 -exclude=.git,.idea,docs,.tox,bin,dist,tools,*.egg-info \ No newline at end of file +exclude=.git,.idea,docs,.tox,bin,dist,tools,*.egg-info