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:
parent
aa59c55c09
commit
0396990c80
80
doc/source/conf.py
Executable file
80
doc/source/conf.py
Executable 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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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(
|
||||
|
@ -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'
|
||||
|
@ -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)
|
||||
|
||||
|
||||
|
@ -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'])
|
||||
|
@ -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
|
||||
|
@ -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):
|
||||
|
@ -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)
|
||||
|
@ -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):
|
||||
|
@ -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)
|
||||
|
@ -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.
|
||||
'''
|
||||
|
||||
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
@ -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 = ''
|
||||
|
@ -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):
|
||||
|
@ -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
|
||||
@ -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):
|
||||
|
@ -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
|
||||
'''
|
||||
|
||||
|
@ -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,
|
||||
|
@ -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):
|
||||
|
@ -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
|
||||
|
@ -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):
|
||||
|
@ -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'
|
||||
|
||||
|
@ -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(
|
||||
|
@ -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',
|
||||
{
|
||||
|
@ -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():
|
||||
|
@ -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, \
|
||||
|
@ -3,7 +3,7 @@
|
||||
# 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
|
||||
|
2
tox.ini
2
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}
|
||||
|
Loading…
Reference in New Issue
Block a user