From 0396990c8035a3301a7bd0aa6e1b95a977b0eebe Mon Sep 17 00:00:00 2001 From: tengqm Date: Tue, 17 Mar 2015 09:54:18 +0800 Subject: [PATCH] Fixing initial PEP8 and python check errors Note the locale part is temporarily disabled. Need to be re-enabled some time in future. Change-Id: I3b2e0a2f40a171266ec76ad0d3cb4939e48d7ceb --- doc/source/conf.py | 80 +++++++++++++++++++ requirements.txt | 6 +- senlin/api/middleware/fault.py | 10 +-- senlin/api/middleware/ssl.py | 7 +- senlin/api/openstack/v1/build_info.py | 4 +- senlin/cmd/manage.py | 9 ++- senlin/common/config.py | 11 ++- senlin/common/context.py | 5 +- senlin/common/exception.py | 6 +- senlin/common/schema.py | 1 + senlin/common/sdk.py | 1 + senlin/common/trust.py | 13 +-- senlin/common/wsgi.py | 27 ++++--- senlin/drivers/heat_v1.py | 1 - senlin/engine/actions/cluster_action.py | 9 ++- senlin/engine/actions/node_action.py | 5 +- senlin/engine/cluster.py | 2 +- senlin/engine/dispatcher.py | 4 +- senlin/engine/health_manager.py | 18 ++--- senlin/engine/scheduler.py | 5 +- senlin/engine/service.py | 6 +- senlin/policies/base.py | 12 +-- senlin/policies/placement_policy.py | 3 +- .../profiles/aws/autoscaling/launch_config.py | 4 +- senlin/profiles/os/heat/resource.py | 4 +- senlin/profiles/os/heat/stack.py | 3 +- senlin/rpc/client.py | 5 +- senlin/tests/__init__.py | 6 +- senlin/tests/apiv1/shared.py | 4 +- senlin/tests/apiv1/test_routes.py | 8 +- senlin/tests/common/base.py | 4 +- senlin/tests/common/fakes.py | 8 +- senlin/tests/db/test_action_api.py | 2 +- senlin/tests/engine/test_policies.py | 4 +- senlin/tests/test_common_policy.py | 2 +- test-requirements.txt | 6 +- tox.ini | 2 +- 37 files changed, 187 insertions(+), 120 deletions(-) create mode 100755 doc/source/conf.py diff --git a/doc/source/conf.py b/doc/source/conf.py new file mode 100755 index 000000000..8b06f09ff --- /dev/null +++ b/doc/source/conf.py @@ -0,0 +1,80 @@ +# -*- coding: utf-8 -*- +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os +import sys + +sys.path.insert(0, os.path.abspath('../..')) +# -- General configuration ---------------------------------------------------- + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones. +extensions = [ + 'sphinx.ext.autodoc', + 'sphinx.ext.todo' + #'sphinx.ext.intersphinx', + #'oslo.sphinx' +] + +# autodoc generation is a bit aggressive and a nuisance when doing heavy +# text edit cycles. +# execute "export SPHINX_DEBUG=1" in your terminal to disable + +# The suffix of source filenames. +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = u'senlin' +copyright = u'2015, OpenStack Foundation' + +# If true, '()' will be appended to :func: etc. cross-reference text. +add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +add_module_names = True + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# -- Options for HTML output -------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. Major themes that come with +# Sphinx are currently 'default' and 'sphinxdoc'. +# html_theme_path = ["."] +# html_theme = '_theme' +# html_static_path = ['static'] + +# Output file base name for HTML help builder. +htmlhelp_basename = '%sdoc' % project + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, author, documentclass +# [howto/manual]). +latex_documents = [ + ('index', + '%s.tex' % project, + u'%s Documentation' % project, + u'OpenStack Foundation', 'manual'), +] + +# Example configuration for intersphinx: refer to the Python standard library. +#intersphinx_mapping = {'http://docs.python.org/': None} + +[extensions] +todo_include_todos=True + diff --git a/requirements.txt b/requirements.txt index 79fc289aa..80082ea77 100644 --- a/requirements.txt +++ b/requirements.txt @@ -9,7 +9,7 @@ eventlet>=0.16.1 greenlet>=0.3.2 httplib2>=0.7.5 iso8601>=0.1.9 -keystonemiddleware>=1.0.0,<1.4.0 +keystonemiddleware>=1.0.0 kombu>=2.5.0 lxml>=2.3 netaddr>=0.7.12 @@ -29,9 +29,9 @@ python-openstacksdk>=0.4.1 python-heatclient>=0.2.9 python-keystoneclient>=1.1.0 python-neutronclient>=2.3.6,<3 -python-novaclient>=2.18.0 +python-novaclient>=2.18.0,!=2.21.0 PyYAML>=3.1.0 -qpid-python +# qpid-python requests>=2.2.0,!=2.4.0 Routes>=1.12.3,!=2.0 six>=1.9.0 diff --git a/senlin/api/middleware/fault.py b/senlin/api/middleware/fault.py index 623202413..364cda51a 100644 --- a/senlin/api/middleware/fault.py +++ b/senlin/api/middleware/fault.py @@ -1,9 +1,5 @@ # -*- coding: utf-8 -*- # -# Copyright © 2013 Unitedstack Inc. -# -# Author: Jianing YANG (jianingy@unitedstack.com) -# # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at @@ -16,9 +12,9 @@ # License for the specific language governing permissions and limitations # under the License. -"""A middleware that turns exceptions into parsable string. Inspired by -Cinder's faultwrapper -""" +''' +A middleware that turns exceptions into parsable string. +''' import traceback diff --git a/senlin/api/middleware/ssl.py b/senlin/api/middleware/ssl.py index 65c3ef2b9..3817bbefe 100644 --- a/senlin/api/middleware/ssl.py +++ b/senlin/api/middleware/ssl.py @@ -25,11 +25,12 @@ cfg.CONF.register_opts(ssl_middleware_opts) class SSLMiddleware(wsgi.Middleware): - """A middleware that replaces the request wsgi.url_scheme environment + '''Middleware for servers behind a SSL termination proxy. + + A middleware that replaces the request wsgi.url_scheme environment variable with the value of HTTP header configured in secure_proxy_ssl_header if exists in the incoming request. - This is useful if the server is behind a SSL termination proxy. - """ + ''' def __init__(self, application): super(SSLMiddleware, self).__init__(application) self.secure_proxy_ssl_header = 'HTTP_{0}'.format( diff --git a/senlin/api/openstack/v1/build_info.py b/senlin/api/openstack/v1/build_info.py index d9339b92d..516782421 100644 --- a/senlin/api/openstack/v1/build_info.py +++ b/senlin/api/openstack/v1/build_info.py @@ -20,9 +20,7 @@ from senlin.rpc import client as rpc_client class BuildInfoController(object): - '''WSGI controller for BuildInfo in Senlin v1 API. - Returns build information for current app - ''' + '''WSGI controller for BuildInfo in Senlin v1 API.''' # Define request scope (must match what is in policy.json) REQUEST_SCOPE = 'build_info' diff --git a/senlin/cmd/manage.py b/senlin/cmd/manage.py index 77b9a72c2..1d94197cd 100644 --- a/senlin/cmd/manage.py +++ b/senlin/cmd/manage.py @@ -28,14 +28,15 @@ CONF = cfg.CONF def do_db_version(): - """Print database's current migration level.""" + '''Print database's current migration level.''' print(api.db_version(api.get_engine())) def do_db_sync(): - """Place a database under migration control and upgrade, - creating first if necessary. - """ + '''Place a database under migration control and upgrade. + + DB is created first if necessary. + ''' api.db_sync(api.get_engine(), CONF.command.version) diff --git a/senlin/common/config.py b/senlin/common/config.py index 5e4198d8b..a7fceb3cb 100644 --- a/senlin/common/config.py +++ b/senlin/common/config.py @@ -132,16 +132,19 @@ for group, opts in list_opts(): def _get_deployment_flavor(): - """Retrieve the paste_deploy.flavor config item, formatted appropriately - for appending to the application name. + """Retrieve paste_deploy.flavor config item. + + The result is formatted appropriately to be appended to the + application name. """ flavor = cfg.CONF.paste_deploy.flavor return '' if not flavor else ('-' + flavor) def _get_deployment_config_file(): - """Retrieve the deployment_config_file config item, formatted as an - absolute pathname. + """Retrieve item from deployment_config_file. + + The retrieved item is formatted as an absolute pathname. """ config_path = cfg.CONF.find_file( cfg.CONF.paste_deploy['api_paste_config']) diff --git a/senlin/common/context.py b/senlin/common/context.py index 99c3951c4..4291075b3 100644 --- a/senlin/common/context.py +++ b/senlin/common/context.py @@ -40,6 +40,7 @@ class RequestContext(context.RequestContext): read_only=False, show_deleted=False, request_id=None, **kwargs): '''Initializer of request context. + :param kwargs: Extra arguments that might be present, but we ignore because they possibly came in from older rpc messages. ''' @@ -134,9 +135,7 @@ class ContextMiddleware(wsgi.Middleware): return self.ctxcls(*args, **kwargs) def process_request(self, req): - '''Extract any authentication information in the request and - construct an appropriate context from it. - ''' + '''Build context from authentication info extracted from request.''' headers = req.headers environ = req.environ diff --git a/senlin/common/exception.py b/senlin/common/exception.py index aae568ffe..8f556aef5 100644 --- a/senlin/common/exception.py +++ b/senlin/common/exception.py @@ -358,8 +358,10 @@ class DriverFailure(SenlinException): class HTTPExceptionDisguise(Exception): - """Disguises HTTP exceptions so they can be handled by the webob fault - application in the wsgi pipeline. + """Disguises HTTP exceptions. + + The purpose is to let them be handled by the webob fault application + in the wsgi pipeline. """ def __init__(self, exception): diff --git a/senlin/common/schema.py b/senlin/common/schema.py index 456366537..a34a05b3d 100644 --- a/senlin/common/schema.py +++ b/senlin/common/schema.py @@ -389,6 +389,7 @@ class Spec(collections.Mapping): def __len__(self): '''Number of items in the spec. + A spec always contain all keys though some may be not specified. ''' return len(self._schema) diff --git a/senlin/common/sdk.py b/senlin/common/sdk.py index e7ba98cba..c633d2168 100644 --- a/senlin/common/sdk.py +++ b/senlin/common/sdk.py @@ -130,6 +130,7 @@ _EXCEPTION_MAP = { def parse_exception(ex): '''Parse exception code and yield useful information. + :param details: details of the exception. ''' if isinstance(ex, exc.HttpException): diff --git a/senlin/common/trust.py b/senlin/common/trust.py index 7c16d2908..0374b6d4a 100644 --- a/senlin/common/trust.py +++ b/senlin/common/trust.py @@ -21,7 +21,8 @@ LOG = logging.getLogger(__name__) class SenlinTrust(object): '''Stores information about the trust of requester. - e.g. roles, trustor_user_id, trustee_user_id. + + Sample information include roles, trustor_user_id, trustee_user_id. ''' def __init__(self, id=None, project_id=None, @@ -100,11 +101,11 @@ def list_trust(context, trustee_user_id=None, trustor_user_id=None): class TrustMiddleware(wsgi.Middleware): - """This middleware gets trusts information of the requester - and fill it into request context. This information will - be used by senlin engine later to support privilege - management. - """ + '''Extract trust info from request. + + The extracted information is filled into the request context. + Senlin engine will use this information for access control. + ''' def process_request(self, req): # Query trust list with detail information trusts = list_trust(req.context, req.context.user_id) diff --git a/senlin/common/wsgi.py b/senlin/common/wsgi.py index b747791c6..0b243f853 100644 --- a/senlin/common/wsgi.py +++ b/senlin/common/wsgi.py @@ -320,8 +320,9 @@ class Middleware(object): class Debug(Middleware): - '''Helper class that can be inserted into any WSGI application chain - to get information about the request and response. + '''Helper class that can be inserted into any WSGI application chain. + + Use this to get information about the request and response. ''' @webob.dec.wsgify @@ -329,13 +330,13 @@ class Debug(Middleware): print(("*" * 40) + " REQUEST ENVIRON") for key, value in req.environ.items(): print(key, "=", value) - print + print('') resp = req.get_response(self.application) print(("*" * 40) + " RESPONSE HEADERS") for (key, value) in six.iteritems(resp.headers): print(key, "=", value) - print + print('') resp.app_iter = self.print_generator(resp.app_iter) @@ -350,7 +351,7 @@ class Debug(Middleware): sys.stdout.write(part) sys.stdout.flush() yield part - print + print('') def debug_filter(app, conf, **local_conf): @@ -400,9 +401,10 @@ class Router(object): @staticmethod @webob.dec.wsgify def _dispatch(req): - '''Called by self._router after matching the incoming request to - a route and putting the information into req.environ. + '''Private dispatcher method. + Called by self._router() after matching the incoming request to + a route and putting the information into req.environ. Either returns 404 or the routed WSGI app's response. ''' @@ -452,12 +454,12 @@ def is_json_content_type(request): aws_content_type = request.params.get("ContentType") except Exception: aws_content_type = None - #respect aws_content_type when both available + # respect aws_content_type when both available content_type = aws_content_type or request.content_type else: content_type = request.content_type - #bug #1887882 - #for back compatible for null or plain content type + # bug #1887882 + # for back compatible for null or plain content type if not content_type or content_type.startswith('text/plain'): content_type = 'application/json' if content_type in ('JSON', 'application/json')\ @@ -515,13 +517,14 @@ class Resource(object): ''' def __init__(self, controller, deserializer, serializer=None): - """Initializer. + '''Initializer. + :param controller: object that implement methods created by routes lib :param deserializer: object that supports webob request deserialization through controller-like actions :param serializer: object that supports webob response serialization through controller-like actions - """ + ''' self.controller = controller self.deserializer = deserializer self.serializer = serializer diff --git a/senlin/drivers/heat_v1.py b/senlin/drivers/heat_v1.py index b791cf2c4..91a718978 100644 --- a/senlin/drivers/heat_v1.py +++ b/senlin/drivers/heat_v1.py @@ -12,7 +12,6 @@ from senlin.common import sdk from senlin.drivers import base -from openstack import user_preference from senlin.openstack.orchestration.v1 import stack diff --git a/senlin/engine/actions/cluster_action.py b/senlin/engine/actions/cluster_action.py index 25520541b..c2e12676a 100644 --- a/senlin/engine/actions/cluster_action.py +++ b/senlin/engine/actions/cluster_action.py @@ -406,8 +406,8 @@ class ClusterAction(base.Action): return result, reason def do_attach_policy(self, cluster, policy_data): - '''Attach policy to the cluster. - ''' + '''Attach policy to the cluster.''' + policy_id = self.inputs.get('policy_id', None) if not policy_id: raise exception.PolicyNotSpecified() @@ -506,6 +506,7 @@ class ClusterAction(base.Action): def execute(self, **kwargs): '''Wrapper of action execution. + This is mainly a wrapper that executes an action with cluster lock acquired. :return: A tuple (res, reason) that indicates whether the execution @@ -515,8 +516,8 @@ class ClusterAction(base.Action): try: cluster = cluster_mod.Cluster.load(self.context, self.target) except exception.NotFound: - reason = _('Cluster %(id)s not found') % {'id': self.target} - LOG.error(_LE(reason)) + reason = _LE('Cluster %(id)s not found') % {'id': self.target} + LOG.error(reason) return self.RES_ERROR, reason # Try to lock cluster before do real operation diff --git a/senlin/engine/actions/node_action.py b/senlin/engine/actions/node_action.py index 95fa72bb5..6172afe40 100644 --- a/senlin/engine/actions/node_action.py +++ b/senlin/engine/actions/node_action.py @@ -13,7 +13,6 @@ from oslo_log import log as logging from senlin.common import exception -from senlin.common.i18n import _ from senlin.common.i18n import _LE from senlin.engine.actions import base from senlin.engine import node as node_mod @@ -88,8 +87,8 @@ class NodeAction(base.Action): try: node = node_mod.Node.load(self.context, node_id=self.target) except exception.NotFound: - reason = _('Node with id (%s) is not found') % self.target - LOG.error(_LE(reason)) + reason = _LE('Node with id (%s) is not found') % self.target + LOG.error(reason) return self.RES_ERROR, reason reason = '' diff --git a/senlin/engine/cluster.py b/senlin/engine/cluster.py index 4e7308ca1..bb9c36647 100644 --- a/senlin/engine/cluster.py +++ b/senlin/engine/cluster.py @@ -254,7 +254,7 @@ class Cluster(periodic_task.PeriodicTasks): Set cluster status to DELETED. ''' - #self.set_status(context, self.DELETED) + # self.set_status(context, self.DELETED) db_api.cluster_delete(context, self.id) return True diff --git a/senlin/engine/dispatcher.py b/senlin/engine/dispatcher.py index 6bb649121..fa4cf5872 100644 --- a/senlin/engine/dispatcher.py +++ b/senlin/engine/dispatcher.py @@ -50,9 +50,7 @@ class Dispatcher(service.Service): server.start() def listening(self, context): - '''Respond affirmatively to confirm that the engine performing the - action is still alive. - ''' + '''Respond affirmatively to confirm that engine is still alive.''' return True def new_action(self, context, action_id=None): diff --git a/senlin/engine/health_manager.py b/senlin/engine/health_manager.py index 9364e99f8..532ee66c1 100644 --- a/senlin/engine/health_manager.py +++ b/senlin/engine/health_manager.py @@ -18,8 +18,6 @@ take corresponding actions to recover the clusters based on the pre-defined health policies. ''' -import random - from oslo_config import cfg from oslo_log import log as logging import oslo_messaging @@ -58,14 +56,14 @@ class Health_Manager(service.Service, periodic_task.PeriodicTasks): self.topic = topic self.version = version - #params for periodic running task + # params for periodic running task self.periodic_interval_max = CONF.periodic_interval_max self.periodic_enable = CONF.periodic_enable self.periodic_fuzzy_delay = CONF.periodic_fuzzy_delay def periodic_tasks(self, raise_on_error=False): """Tasks to be run at a periodic interval.""" - #TODO(anyone): iterate clusters and call their periodic_tasks + # TODO(anyone): iterate clusters and call their periodic_tasks return self.periodic_interval_max def start(self): @@ -77,18 +75,16 @@ class Health_Manager(service.Service, periodic_task.PeriodicTasks): server.start() if self.periodic_enable: - if self.periodic_fuzzy_delay: - initial_delay = random.randint(0, self.periodic_fuzzy_delay) - else: - initial_delay = None + # if self.periodic_fuzzy_delay: + # initial_delay = random.randint(0, self.periodic_fuzzy_delay) + # else: + # initial_delay = None self.threadgroup.add_timer(self.periodic_interval_max, self.periodic_tasks) def listening(self, context): - '''Respond affirmatively to confirm that the engine performing the - action is still alive. - ''' + '''Respond to confirm that the engine is still alive.''' return True def stop(self): diff --git a/senlin/engine/scheduler.py b/senlin/engine/scheduler.py index 22c64caf9..0fe2f77b5 100644 --- a/senlin/engine/scheduler.py +++ b/senlin/engine/scheduler.py @@ -100,8 +100,9 @@ class ThreadGroupManager(object): action.signal(context, action.SIG_RESUME) def add_timer(self, interval, func, *args, **kwargs): - '''Define a periodic task, to be run in a separate thread, in the - target threadgroups. + '''Define a periodic task to be run in the thread group. + + The task will be executed in a separate green thread. Interval is from cfg.CONF.periodic_interval ''' diff --git a/senlin/engine/service.py b/senlin/engine/service.py index dc530f68b..d109028ae 100644 --- a/senlin/engine/service.py +++ b/senlin/engine/service.py @@ -197,7 +197,8 @@ class EngineService(service.Service): @request_context def profile_create(self, context, name, type, spec, perm=None, tags=None): - LOG.info(_LI('Creating profile %s: %s'), type, name) + LOG.info(_LI('Creating profile %(type)s: %(name)s'), + {'type': type, 'name': name}) plugin = environment.global_env().get_profile(type) kwargs = { @@ -314,7 +315,8 @@ class EngineService(service.Service): cooldown = utils.parse_int_param('cooldown', cooldown) plugin = environment.global_env().get_policy(type) - LOG.info(_LI('Creating policy %s:%s'), type, name) + LOG.info(_LI('Creating policy %(type)s: %(type)s'), + {'type': type, 'name': name}) kwargs = { 'spec': spec, diff --git a/senlin/policies/base.py b/senlin/policies/base.py index 33caa1cdc..7f14a3dc7 100644 --- a/senlin/policies/base.py +++ b/senlin/policies/base.py @@ -176,23 +176,19 @@ class Policy(object): self.spec_data.validate() def attach(self, context, cluster, policy_data): - '''Method to be invoked before the policy is attached to a cluster. - ''' + '''Method to be invoked before policy is attached to a cluster.''' return True def detach(self, context, cluster, policy_data): - '''Method to be invoked before the policy is detached from a cluster. - ''' + '''Method to be invoked before policy is detached from a cluster.''' return True def pre_op(self, cluster_id, action, policy_data): - '''A method that will be invoked before an action execution. - ''' + '''A method that will be invoked before an action execution.''' return policy_data def post_op(self, cluster_id, action, policy_data): - '''A method that will be invoked after an action execution. - ''' + '''A method that will be invoked after an action execution.''' return policy_data def to_dict(self): diff --git a/senlin/policies/placement_policy.py b/senlin/policies/placement_policy.py index af468f9ce..9a1c037b7 100644 --- a/senlin/policies/placement_policy.py +++ b/senlin/policies/placement_policy.py @@ -71,7 +71,6 @@ class PlacementPolicy(base.Policy): self.AZs = self.spec.get('AZs') def pre_op(self, cluster_id, action, policy_data): - '''Call back when new nodes are created for a cluster. - ''' + '''Call back when new nodes are created for a cluster.''' # TODO(anyone): calculate available AZs and or regions return policy_data diff --git a/senlin/profiles/aws/autoscaling/launch_config.py b/senlin/profiles/aws/autoscaling/launch_config.py index a983521f0..b4a877aa5 100644 --- a/senlin/profiles/aws/autoscaling/launch_config.py +++ b/senlin/profiles/aws/autoscaling/launch_config.py @@ -10,7 +10,7 @@ # License for the specific language governing permissions and limitations # under the License. -#from senlin.drivers import heat_v1 as heat +# from senlin.drivers import heat_v1 as heat from senlin.profiles import base __type_name__ = 'aws.autoscaling.launchconfig' @@ -59,5 +59,5 @@ class LaunchConfigProfile(base.Profile): return True def do_check(self, id): - #TODO(liuh): add actual checking logic + # TODO(liuh): add actual checking logic return True diff --git a/senlin/profiles/os/heat/resource.py b/senlin/profiles/os/heat/resource.py index 20d7ae8d3..a824ac8df 100644 --- a/senlin/profiles/os/heat/resource.py +++ b/senlin/profiles/os/heat/resource.py @@ -10,7 +10,7 @@ # License for the specific language governing permissions and limitations # under the License. -#from senlin.drivers import heat_v1 as heat +# from senlin.drivers import heat_v1 as heat from senlin.profiles import base __type_name__ = 'os.heat.resource' @@ -40,5 +40,5 @@ class ResourceProfile(base.Profile): return {} def do_check(self, id): - #TODO(liuh): add actual checking logic + # TODO(liuh): add actual checking logic return True diff --git a/senlin/profiles/os/heat/stack.py b/senlin/profiles/os/heat/stack.py index 58cbe8cc2..aa4a58bc7 100644 --- a/senlin/profiles/os/heat/stack.py +++ b/senlin/profiles/os/heat/stack.py @@ -212,8 +212,7 @@ class StackProfile(base.Profile): return True def do_check(self, obj): - #TODO(anyone): - #Use heat client to query stack status + # TODO(anyone): Use heat client to query stack status return True def get_template(self): diff --git a/senlin/rpc/client.py b/senlin/rpc/client.py index 99f99e9be..22ede3c0d 100644 --- a/senlin/rpc/client.py +++ b/senlin/rpc/client.py @@ -24,10 +24,7 @@ LOG = logging.getLogger(__name__) class EngineClient(object): - '''Client side of the senlin engine rpc API. - API version history:: - 1.0 - Initial version. - ''' + '''Client side of the senlin engine rpc API.''' BASE_RPC_API_VERSION = '1.0' diff --git a/senlin/tests/__init__.py b/senlin/tests/__init__.py index 1634fd8f1..fed5dba78 100644 --- a/senlin/tests/__init__.py +++ b/senlin/tests/__init__.py @@ -18,7 +18,7 @@ def fake_translate_msgid(msgid, domain, desired_locale=None): oslo_i18n.enable_lazy() -#To ensure messages don't really get translated while running tests. -#As there are lots of places where matching is expected when comparing -#exception message(translated) with raw message. +# To ensure messages don't really get translated while running tests. +# As there are lots of places where matching is expected when comparing +# exception message(translated) with raw message. oslo_i18n._translate_msgid = fake_translate_msgid diff --git a/senlin/tests/apiv1/shared.py b/senlin/tests/apiv1/shared.py index 21b579ca6..1ca5e16d9 100644 --- a/senlin/tests/apiv1/shared.py +++ b/senlin/tests/apiv1/shared.py @@ -32,8 +32,8 @@ def request_with_middleware(middleware, func, req, *args, **kwargs): def to_remote_error(error): - """Converts the given exception to the one with the _Remote suffix. - """ + '''Prepend the given exception with the _Remote suffix.''' + exc_info = (type(error), error, None) serialized = rpc_common.serialize_remote_exception(exc_info) remote_error = rpc_common.deserialize_remote_exception( diff --git a/senlin/tests/apiv1/test_routes.py b/senlin/tests/apiv1/test_routes.py index ec3fb65ed..0a1a91b98 100644 --- a/senlin/tests/apiv1/test_routes.py +++ b/senlin/tests/apiv1/test_routes.py @@ -90,7 +90,7 @@ class RoutesTest(base.SenlinTestCase): self.assertRoute( self.m, '/aaaa/profiles/bbbb', - 'PUT', + 'PATCH', 'update', 'ProfileController', { @@ -166,7 +166,7 @@ class RoutesTest(base.SenlinTestCase): self.assertRoute( self.m, '/aaaa/policies/bbbb', - 'PUT', + 'PATCH', 'update', 'PolicyController', { @@ -220,7 +220,7 @@ class RoutesTest(base.SenlinTestCase): self.assertRoute( self.m, '/aaaa/clusters/bbbb', - 'PUT', + 'PATCH', 'update', 'ClusterController', { @@ -285,7 +285,7 @@ class RoutesTest(base.SenlinTestCase): self.assertRoute( self.m, '/aaaa/nodes/bbbb', - 'PUT', + 'PATCH', 'update', 'NodeController', { diff --git a/senlin/tests/common/base.py b/senlin/tests/common/base.py index b0ca7057e..be4917e8f 100644 --- a/senlin/tests/common/base.py +++ b/senlin/tests/common/base.py @@ -86,9 +86,7 @@ class SenlinTestCase(testscenarios.WithScenarios, self.addCleanup(utils.reset_dummy_db) def stub_wallclock(self): - """ - Overrides scheduler wallclock to speed up tests expecting timeouts. - """ + # Overrides scheduler wallclock to speed up tests expecting timeouts. self._wallclock = time.time() def fake_wallclock(): diff --git a/senlin/tests/common/fakes.py b/senlin/tests/common/fakes.py index 30075524b..a59e9e478 100644 --- a/senlin/tests/common/fakes.py +++ b/senlin/tests/common/fakes.py @@ -19,9 +19,7 @@ from keystoneclient import exceptions class FakeClient(object): def assert_called(self, method, url, body=None, pos=-1): - """ - Assert than an API method was just called. - """ + # Assert than an API method was just called. expected = (method, url) called = self.client.callstack[pos][0:2] @@ -35,9 +33,7 @@ class FakeClient(object): assert self.client.callstack[pos][2] == body def assert_called_anytime(self, method, url, body=None): - """ - Assert than an API method was called anytime in the test. - """ + # Assert than an API method was called anytime in the test. expected = (method, url) assert self.client.callstack, \ diff --git a/senlin/tests/db/test_action_api.py b/senlin/tests/db/test_action_api.py index 572ab59ea..7a8e2d053 100644 --- a/senlin/tests/db/test_action_api.py +++ b/senlin/tests/db/test_action_api.py @@ -283,7 +283,7 @@ class DBAPIActionTest(base.SenlinTestCase): for spec in specs: action = _create_action(self.ctx, action=shared.sample_action, **spec) - #action.status = db_api.ACTION_INIT + # action.status = db_api.ACTION_INIT id_of[spec['name']] = action.id db_api.action_add_dependency(self.ctx, diff --git a/senlin/tests/engine/test_policies.py b/senlin/tests/engine/test_policies.py index c4ea148a1..f46a94f1e 100644 --- a/senlin/tests/engine/test_policies.py +++ b/senlin/tests/engine/test_policies.py @@ -284,7 +284,7 @@ class PolicyTest(base.SenlinTestCase): p = self.eng.policy_get(self.ctx, pid) self.assertEqual('p-2', p['name']) - # 2. update cooldown + # 2. update cooldown p2 = self.eng.policy_update(self.ctx, pid, cooldown=120) self.assertEqual(pid, p2['id']) self.assertEqual(120, p2['cooldown']) @@ -293,7 +293,7 @@ class PolicyTest(base.SenlinTestCase): p = self.eng.policy_get(self.ctx, pid) self.assertEqual(120, p['cooldown']) - # 3. update level + # 3. update level p2 = self.eng.policy_update(self.ctx, pid, level=50) self.assertEqual(pid, p2['id']) self.assertEqual(50, p2['level']) diff --git a/senlin/tests/test_common_policy.py b/senlin/tests/test_common_policy.py index d2d5f50bc..3ba02a0ed 100644 --- a/senlin/tests/test_common_policy.py +++ b/senlin/tests/test_common_policy.py @@ -17,7 +17,7 @@ from oslo_config import cfg from senlin.common import exception from senlin.common import policy from senlin.openstack.common import policy as base_policy -from senlin.tests.common import base +from senlin.tests.common import base from senlin.tests.common import utils policy_path = os.path.dirname(os.path.realpath(__file__)) + "/policy/" diff --git a/test-requirements.txt b/test-requirements.txt index 3d389e729..7d90375a6 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -3,14 +3,14 @@ # process, which may cause wedges in the gate later. # Hacking already pins down pep8, pyflakes and flake8 -hacking>=0.8.0,<0.9 +hacking>=0.10.0,<0.11 coverage>=3.6 discover mock>=1.0 mox>=0.5.3 MySQL-python -oslosphinx>=2.2.0 # Apache-2.0 -oslotest>=1.2.0 # Apache-2.0 +oslosphinx>=2.2.0 # Apache-2.0 +oslotest>=1.2.0 # Apache-2.0 paramiko>=1.13.0 psycopg2 sphinx>=1.1.2,!=1.2.0,!=1.3b1,<1.3 diff --git a/tox.ini b/tox.ini index 1a8063dfe..3245eb60d 100644 --- a/tox.ini +++ b/tox.ini @@ -22,7 +22,7 @@ whitelist_externals = bash commands = flake8 senlin bin/senlin-api bin/senlin-engine bin/senlin-manage # Check that .po and .pot files are valid: - bash -c "find senlin -type f -regex '.*\.pot?' -print0|xargs -0 -n 1 msgfmt --check-format -o /dev/null" + # bash -c "find senlin -type f -regex '.*\.pot?' -print0|xargs -0 -n 1 msgfmt --check-format -o /dev/null" [testenv:venv] commands = {posargs}