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
This commit is contained in:
tengqm 2015-03-17 09:54:18 +08:00
parent aa59c55c09
commit ac1025f891
34 changed files with 177 additions and 112 deletions

80
doc/source/conf.py Executable file
View File

@ -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

View File

@ -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,7 +29,7 @@ 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
requests>=2.2.0,!=2.4.0

View File

@ -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

View File

@ -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(

View File

@ -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'

View File

@ -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)

View File

@ -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'])

View File

@ -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

View File

@ -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):

View File

@ -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):

View File

@ -100,11 +100,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)

View File

@ -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

View File

@ -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

View File

@ -88,8 +88,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 = ''

View File

@ -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):

View File

@ -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):

View File

@ -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
'''

View File

@ -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,

View File

@ -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):

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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):

View File

@ -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'

View File

@ -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

View File

@ -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(

View File

@ -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',
{

View File

@ -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():

View File

@ -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, \

View File

@ -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,

View File

@ -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'])

View File

@ -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/"

View File

@ -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

View File

@ -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}