Enable flake8 H404 checking

This check indicates on comments in which multi line docstring should
start without a leading new line. This change fixed all violators of
said check.

Change-Id: Ic7357b8c7420767dba611f6fcee07b7700f3aea8
This commit is contained in:
Alexander Bochkarev 2014-02-24 10:41:36 +04:00
parent b91b9bd0c8
commit dd4032e9fb
130 changed files with 455 additions and 865 deletions

View File

@ -468,8 +468,7 @@ def exception_to_ec2code(ex):
def ec2_error_ex(ex, req, code=None, message=None, unexpected=False):
"""
Return an EC2 error response based on passed exception and log
"""Return an EC2 error response based on passed exception and log
the exception on an appropriate log level:
* DEBUG: expected errors

View File

@ -172,8 +172,7 @@ class PlainMapper(APIMapper):
class APIRouter(base_wsgi.Router):
"""
Routes requests on the OpenStack API to the appropriate controller
"""Routes requests on the OpenStack API to the appropriate controller
and method.
"""
ExtensionManager = None # override in subclasses
@ -252,8 +251,7 @@ class APIRouter(base_wsgi.Router):
class APIRouterV3(base_wsgi.Router):
"""
Routes requests on the OpenStack v3 API to the appropriate controller
"""Routes requests on the OpenStack v3 API to the appropriate controller
and method.
"""

View File

@ -476,8 +476,7 @@ class ViewBuilder(object):
"""Model API responses as dictionaries."""
def _get_project_id(self, request):
"""
Get project id from request url if present or empty string
"""Get project id from request url if present or empty string
otherwise
"""
project_id = request.environ["nova.context"].project_id

View File

@ -42,8 +42,7 @@ CONF.register_opt(allow_instance_snapshots_opt)
class APIRouter(nova.api.openstack.APIRouter):
"""
Routes requests on the OpenStack API to the appropriate controller
"""Routes requests on the OpenStack API to the appropriate controller
and method.
"""
ExtensionManager = extensions.ExtensionManager
@ -130,8 +129,7 @@ class APIRouter(nova.api.openstack.APIRouter):
class APIRouterV3(nova.api.openstack.APIRouterV3):
"""
Routes requests on the OpenStack API to the appropriate controller
"""Routes requests on the OpenStack API to the appropriate controller
and method.
"""
def __init__(self, init_only=None):

View File

@ -42,8 +42,7 @@ class AgentsIndexTemplate(xmlutil.TemplateBuilder):
class AgentController(object):
"""
The agent is talking about guest agent.The host can use this for
"""The agent is talking about guest agent.The host can use this for
things like accessing files on the disk, configuring networking,
or running other applications/scripts in the guest while it is
running. Typically this uses some hypervisor-specific transport
@ -66,9 +65,7 @@ class AgentController(object):
"""
@wsgi.serializers(xml=AgentsIndexTemplate)
def index(self, req):
"""
Return a list of all agent builds. Filter by hypervisor.
"""
"""Return a list of all agent builds. Filter by hypervisor."""
context = req.environ['nova.context']
authorize(context)
hypervisor = None

View File

@ -59,8 +59,7 @@ class AggregateController(object):
for a in aggregates]}
def create(self, req, body):
"""
Creates an aggregate, given its name and
"""Creates an aggregate, given its name and
optional availability zone.
"""
context = _get_context(req)

View File

@ -133,8 +133,7 @@ class CellDeserializer(wsgi.XMLDeserializer):
def _filter_keys(item, keys):
"""
Filters all model attributes except for keys
"""Filters all model attributes except for keys
item is a dict
"""
@ -142,8 +141,7 @@ def _filter_keys(item, keys):
def _fixup_cell_info(cell_info, keys):
"""
If the transport_url is present in the cell, derive username,
"""If the transport_url is present in the cell, derive username,
rpc_host, and rpc_port from it.
"""
@ -294,8 +292,7 @@ class Controller(object):
raise exc.HTTPBadRequest(explanation=msg)
def _normalize_cell(self, cell, existing=None):
"""
Normalize input cell data. Normalizations include:
"""Normalize input cell data. Normalizations include:
* Converting cell['type'] to is_parent boolean.
* Merging existing transport URL with transport information.

View File

@ -37,8 +37,7 @@ class Controller(wsgi.Controller):
@wsgi.action('evacuate')
def _evacuate(self, req, id, body):
"""
Permit admins to evacuate a server from a failed host
"""Permit admins to evacuate a server from a failed host
to a new one.
"""
context = req.environ["nova.context"]

View File

@ -25,9 +25,7 @@ authorize = extensions.extension_authorizer('compute', 'flavormanage')
class FlavorManageController(wsgi.Controller):
"""
The Flavor Lifecycle API controller for the OpenStack API.
"""
"""The Flavor Lifecycle API controller for the OpenStack API."""
_view_builder_class = flavors_view.ViewBuilder
def __init__(self):
@ -87,9 +85,7 @@ class FlavorManageController(wsgi.Controller):
class Flavormanage(extensions.ExtensionDescriptor):
"""
Flavor create/delete API support
"""
"""Flavor create/delete API support."""
name = "FlavorManage"
alias = "os-flavor-manage"

View File

@ -131,8 +131,7 @@ class FloatingIPBulkController(object):
return {"floating_ips_bulk_delete": ip_range}
def _address_to_hosts(self, addresses):
"""
Iterate over hosts within an address range.
"""Iterate over hosts within an address range.
If an explicit range specifier is missing, the parameter is
interpreted as a specific individual address.

View File

@ -96,9 +96,7 @@ class HostController(object):
@wsgi.serializers(xml=HostIndexTemplate)
def index(self, req):
"""
:returns: A dict in the format:
"""Returns a dict in the format:
{'hosts': [{'host_name': 'some.host.name',
'service': 'cells',
'zone': 'internal'},
@ -151,19 +149,20 @@ class HostController(object):
@wsgi.serializers(xml=HostUpdateTemplate)
@wsgi.deserializers(xml=HostUpdateDeserializer)
def update(self, req, id, body):
"""
"""Updates a specified body.
:param body: example format {'status': 'enable',
'maintenance_mode': 'enable'}
:returns:
"""
def read_enabled(orig_val, msg):
"""
"""Checks a specified orig_val and returns True for 'enabled'
and False for 'disabled'.
:param orig_val: A string with either 'enable' or 'disable'. May
be surrounded by whitespace, and case doesn't
matter
:param msg: The message to be passed to HTTPBadRequest. A single
%s will be replaced with orig_val.
:returns: True for 'enabled' and False for 'disabled'
"""
val = orig_val.strip().lower()
if val == "enable":

View File

@ -64,8 +64,7 @@ class KeypairController(object):
@wsgi.serializers(xml=KeypairTemplate)
def create(self, req, body):
"""
Create or import keypair.
"""Create or import keypair.
Sending name will generate a key and return private_key
and fingerprint.
@ -112,9 +111,7 @@ class KeypairController(object):
raise webob.exc.HTTPConflict(explanation=exc.format_message())
def delete(self, req, id):
"""
Delete a keypair with a given name
"""
"""Delete a keypair with a given name."""
context = req.environ['nova.context']
authorize(context, action='delete')
try:
@ -137,9 +134,7 @@ class KeypairController(object):
@wsgi.serializers(xml=KeypairsTemplate)
def index(self, req):
"""
List of keypairs for a user
"""
"""List of keypairs for a user."""
context = req.environ['nova.context']
authorize(context, action='index')
key_pairs = self.api.get_key_pairs(context, context.user_id)

View File

@ -111,9 +111,7 @@ class SecurityGroupsTemplate(xmlutil.TemplateBuilder):
class SecurityGroupXMLDeserializer(wsgi.MetadataXMLDeserializer):
"""
Deserializer to handle xml-formatted security group requests.
"""
"""Deserializer to handle xml-formatted security group requests."""
def default(self, string):
"""Deserialize an xml-formatted security group create request."""
dom = xmlutil.safe_minidom_parse_string(string)
@ -131,9 +129,7 @@ class SecurityGroupXMLDeserializer(wsgi.MetadataXMLDeserializer):
class SecurityGroupRulesXMLDeserializer(wsgi.MetadataXMLDeserializer):
"""
Deserializer to handle xml-formatted security group requests.
"""
"""Deserializer to handle xml-formatted security group requests."""
def default(self, string):
"""Deserialize an xml-formatted security group create request."""

View File

@ -148,9 +148,7 @@ class ServiceController(object):
@wsgi.serializers(xml=ServicesIndexTemplate)
def index(self, req):
"""
Return a list of all running services. Filter by host & service name.
"""
"""Return a list of all running services."""
detailed = self.ext_mgr.is_loaded('os-extended-services')
services = self._get_services_list(req, detailed)

View File

@ -100,8 +100,7 @@ class Controller(wsgi.Controller):
nova.image.glance.get_default_image_service())
def _get_filters(self, req):
"""
Return a dictionary of query param filters from the request
"""Return a dictionary of query param filters from the request.
:param req: the Request object coming from the wsgi layer
:retval a dict of key/value filters

View File

@ -128,15 +128,12 @@ def create_resource():
class Limit(object):
"""
Stores information about a limit for HTTP requests.
"""
"""Stores information about a limit for HTTP requests."""
UNITS = dict([(v, k) for k, v in utils.TIME_UNITS.items()])
def __init__(self, verb, uri, regex, value, unit):
"""
Initialize a new `Limit`.
"""Initialize a new `Limit`.
@param verb: HTTP verb (POST, PUT, etc.)
@param uri: Human-readable URI
@ -166,8 +163,7 @@ class Limit(object):
self.error_message = msg % self.__dict__
def __call__(self, verb, url):
"""
Represents a call to this limit from a relevant request.
"""Represents a call to this limit from a relevant request.
@param verb: string http verb (POST, GET, etc.)
@param url: string URL
@ -237,15 +233,14 @@ DEFAULT_LIMITS = [
class RateLimitingMiddleware(base_wsgi.Middleware):
"""
Rate-limits requests passing through this middleware. All limit information
is stored in memory for this implementation.
"""Rate-limits requests passing through this middleware. All limit
information is stored in memory for this implementation.
"""
def __init__(self, application, limits=None, limiter=None, **kwargs):
"""
Initialize new `RateLimitingMiddleware`, which wraps the given WSGI
application and sets up the given limits.
"""Initialize new `RateLimitingMiddleware`.
It wraps the given WSGI application and sets up the given limits.
@param application: WSGI application to wrap
@param limits: String describing limits
@ -269,10 +264,10 @@ class RateLimitingMiddleware(base_wsgi.Middleware):
@webob.dec.wsgify(RequestClass=wsgi.Request)
def __call__(self, req):
"""
Represents a single call through this middleware. We should record the
request if we have a limit relevant to it. If no limit is relevant to
the request, ignore it.
"""Represents a single call through this middleware.
We should record the request if we have a limit relevant to it.
If no limit is relevant to the request, ignore it.
If the request should be rate limited, return a fault telling the user
they are over the limit and need to retry later.
@ -299,13 +294,10 @@ class RateLimitingMiddleware(base_wsgi.Middleware):
class Limiter(object):
"""
Rate-limit checking class which handles limits in memory.
"""
"""Rate-limit checking class which handles limits in memory."""
def __init__(self, limits, **kwargs):
"""
Initialize the new `Limiter`.
"""Initialize the new `Limiter`.
@param limits: List of `Limit` objects
"""
@ -319,14 +311,11 @@ class Limiter(object):
self.levels[username] = self.parse_limits(value)
def get_limits(self, username=None):
"""
Return the limits for a given user.
"""
"""Return the limits for a given user."""
return [limit.display() for limit in self.levels[username]]
def check_for_delay(self, verb, url, username=None):
"""
Check the given verb/user/user triplet for limit.
"""Check the given verb/user/user triplet for limit.
@return: Tuple of delay (in seconds) and error message (or None, None)
"""
@ -350,8 +339,7 @@ class Limiter(object):
# default limit parsing.
@staticmethod
def parse_limits(limits):
"""
Convert a string into a list of Limit instances. This
"""Convert a string into a list of Limit instances. This
implementation expects a semicolon-separated sequence of
parenthesized groups, where each group contains a
comma-separated sequence consisting of HTTP method,
@ -405,8 +393,8 @@ class Limiter(object):
class WsgiLimiter(object):
"""
Rate-limit checking from a WSGI application. Uses an in-memory `Limiter`.
"""Rate-limit checking from a WSGI application. Uses an in-memory
`Limiter`.
To use, POST ``/<username>`` with JSON data such as::
@ -421,8 +409,7 @@ class WsgiLimiter(object):
"""
def __init__(self, limits=None):
"""
Initialize the new `WsgiLimiter`.
"""Initialize the new `WsgiLimiter`.
@param limits: List of `Limit` objects
"""
@ -430,10 +417,11 @@ class WsgiLimiter(object):
@webob.dec.wsgify(RequestClass=wsgi.Request)
def __call__(self, request):
"""
Handles a call to this application. Returns 204 if the request is
acceptable to the limiter, else a 403 is returned with a relevant
header indicating when the request *will* succeed.
"""Handles a call to this application.
Returns 204 if the request is acceptable to the limiter, else a 403
is returned with a relevant header indicating when the request *will*
succeed.
"""
if request.method != "POST":
raise webob.exc.HTTPMethodNotAllowed()
@ -457,13 +445,10 @@ class WsgiLimiter(object):
class WsgiLimiterProxy(object):
"""
Rate-limit requests based on answers from a remote source.
"""
"""Rate-limit requests based on answers from a remote source."""
def __init__(self, limiter_address):
"""
Initialize the new `WsgiLimiterProxy`.
"""Initialize the new `WsgiLimiterProxy`.
@param limiter_address: IP/port combination of where to request limit
"""
@ -494,8 +479,7 @@ class WsgiLimiterProxy(object):
# decisions are made by a remote server.
@staticmethod
def parse_limits(limits):
"""
Ignore a limits string--simply doesn't apply for the limit
"""Ignore a limits string--simply doesn't apply for the limit
proxy.
@return: Empty list.

View File

@ -28,8 +28,7 @@ authorize = extensions.extension_authorizer('compute', 'v3:' + ALIAS)
class AgentController(object):
"""
The agent is talking about guest agent.The host can use this for
"""The agent is talking about guest agent.The host can use this for
things like accessing files on the disk, configuring networking,
or running other applications/scripts in the guest while it is
running. Typically this uses some hypervisor-specific transport
@ -52,9 +51,7 @@ class AgentController(object):
"""
@extensions.expected_errors(())
def index(self, req):
"""
Return a list of all agent builds. Filter by hypervisor.
"""
"""Return a list of all agent builds. Filter by hypervisor."""
context = req.environ['nova.context']
authorize(context)
hypervisor = None

View File

@ -73,8 +73,7 @@ class AggregateController(wsgi.Controller):
@extensions.expected_errors((400, 409))
@wsgi.response(201)
def create(self, req, body):
"""
Creates an aggregate, given its name and
"""Creates an aggregate, given its name and
optional availability zone.
"""
context = _get_context(req)

View File

@ -44,17 +44,14 @@ authorize = extensions.extension_authorizer('compute', 'v3:' + ALIAS)
def _filter_keys(item, keys):
"""
Filters all model attributes except for keys
"""Filters all model attributes except for keys
item is a dict
"""
return dict((k, v) for k, v in item.iteritems() if k in keys)
def _fixup_cell_info(cell_info, keys):
"""
If the transport_url is present in the cell, derive username,
"""If the transport_url is present in the cell, derive username,
rpc_host, and rpc_port from it.
"""
@ -202,8 +199,7 @@ class CellsController(object):
raise exc.HTTPBadRequest(explanation=msg)
def _normalize_cell(self, cell, existing=None):
"""
Normalize input cell data. Normalizations include:
"""Normalize input cell data. Normalizations include:
* Converting cell['type'] to is_parent boolean.
* Merging existing transport URL with transport information.

View File

@ -42,8 +42,7 @@ class EvacuateController(wsgi.Controller):
@wsgi.action('evacuate')
@validation.schema(evacuate.evacuate)
def _evacuate(self, req, id, body):
"""
Permit admins to evacuate a server from a failed host
"""Permit admins to evacuate a server from a failed host
to a new one.
"""
context = req.environ["nova.context"]

View File

@ -24,9 +24,7 @@ authorize = extensions.extension_authorizer('compute', 'v3:' + ALIAS)
class FlavorManageController(wsgi.Controller):
"""
The Flavor Lifecycle API controller for the OpenStack API.
"""
"""The Flavor Lifecycle API controller for the OpenStack API."""
_view_builder_class = flavors_view.V3ViewBuilder
def __init__(self):
@ -90,9 +88,7 @@ class FlavorManageController(wsgi.Controller):
class FlavorManage(extensions.V3APIExtensionBase):
"""
Flavor create/delete API support
"""
"""Flavor create/delete API support."""
name = "FlavorManage"
alias = ALIAS

View File

@ -37,8 +37,7 @@ class HostController(wsgi.Controller):
@extensions.expected_errors(())
def index(self, req):
"""
:returns: A dict in the format:
""":returns: A dict in the format:
{'hosts': [{'host_name': 'some.host.name',
'service': 'cells',
@ -94,19 +93,17 @@ class HostController(wsgi.Controller):
@extensions.expected_errors((400, 404, 501))
def update(self, req, id, body):
"""
:param body: example format {'host': {'status': 'enable',
""":param body: example format {'host': {'status': 'enable',
'maintenance_mode': 'enable'}}
:returns:
:returns:
"""
def read_enabled(orig_val, msg):
"""
:param orig_val: A string with either 'enable' or 'disable'. May
be surrounded by whitespace, and case doesn't
matter
:param msg: The message to be passed to HTTPBadRequest. A single
%s will be replaced with orig_val.
:returns: True for 'enabled' and False for 'disabled'
""":param orig_val: A string with either 'enable' or 'disable'. May
be surrounded by whitespace, and case doesn't
matter
:param msg: The message to be passed to HTTPBadRequest. A single
%s will be replaced with orig_val.
:returns: True for 'enabled' and False for 'disabled'
"""
val = orig_val.strip().lower()
if val == "enable":

View File

@ -52,8 +52,7 @@ class KeypairController(object):
@wsgi.response(201)
@validation.schema(keypairs.create)
def create(self, req, body):
"""
Create or import keypair.
"""Create or import keypair.
Sending name will generate a key and return private_key
and fingerprint.
@ -98,9 +97,7 @@ class KeypairController(object):
@wsgi.response(204)
@extensions.expected_errors(404)
def delete(self, req, id):
"""
Delete a keypair with a given name
"""
"""Delete a keypair with a given name."""
context = req.environ['nova.context']
authorize(context, action='delete')
try:
@ -122,9 +119,7 @@ class KeypairController(object):
@extensions.expected_errors(())
def index(self, req):
"""
List of keypairs for a user
"""
"""List of keypairs for a user."""
context = req.environ['nova.context']
authorize(context, action='index')
key_pairs = self.api.get_key_pairs(context, context.user_id)

View File

@ -44,8 +44,7 @@ class ServerPasswordController(object):
@extensions.expected_errors(404)
@wsgi.response(204)
def clear(self, req, server_id):
"""
Removes the encrypted server password from the metadata server
"""Removes the encrypted server password from the metadata server
Note that this does not actually change the instance server
password.

View File

@ -101,8 +101,8 @@ class ServiceController(wsgi.Controller):
@extensions.expected_errors(())
def index(self, req):
"""
Return a list of all running services. Filter by host & service name.
"""Return a list of all running services. Filter by host & service
name
"""
services = self._get_services_list(req)

View File

@ -1218,8 +1218,7 @@ class Controller(wsgi.Controller):
return image_uuid
def _image_from_req_data(self, data):
"""
Get image data from the request or raise appropriate
"""Get image data from the request or raise appropriate
exceptions
If no image is supplied - checks to see if there is

View File

@ -27,9 +27,7 @@ def get_view_builder(req):
class ViewBuilder(common.ViewBuilder):
def __init__(self, base_url):
"""
:param base_url: url of the root wsgi application
"""
""":param base_url: url of the root wsgi application."""
self.base_url = base_url
def build_choices(self, VERSIONS, req):

View File

@ -86,8 +86,7 @@ class Request(webob.Request):
self._extension_data = {'db_items': {}}
def cache_db_items(self, key, items, item_key='id'):
"""
Allow API methods to store objects from a DB query to be
"""Allow API methods to store objects from a DB query to be
used by API extensions within the same API request.
An instance of this class only lives for the lifetime of a
@ -99,8 +98,7 @@ class Request(webob.Request):
db_items[item[item_key]] = item
def get_db_items(self, key):
"""
Allow an API extension to get previously stored objects within
"""Allow an API extension to get previously stored objects within
the same API request.
Note that the object data will be slightly stale.
@ -108,8 +106,7 @@ class Request(webob.Request):
return self._extension_data['db_items'][key]
def get_db_item(self, key, item_key):
"""
Allow an API extension to get a previously stored object
"""Allow an API extension to get a previously stored object
within the same API request.
Note that the object data will be slightly stale.
@ -246,9 +243,8 @@ class JSONDeserializer(TextDeserializer):
class XMLDeserializer(TextDeserializer):
def __init__(self, metadata=None):
"""
:param metadata: information needed to deserialize xml into
a dictionary.
""":param metadata: information needed to deserialize xml into
a dictionary.
"""
super(XMLDeserializer, self).__init__()
self.metadata = metadata or {}
@ -365,10 +361,9 @@ class JSONDictSerializer(DictSerializer):
class XMLDictSerializer(DictSerializer):
def __init__(self, metadata=None, xmlns=None):
"""
:param metadata: information needed to deserialize xml into
a dictionary.
:param xmlns: XML namespace to include with serialized xml
""":param metadata: information needed to deserialize xml into
a dictionary.
:param xmlns: XML namespace to include with serialized xml
"""
super(XMLDictSerializer, self).__init__()
self.metadata = metadata or {}
@ -735,14 +730,15 @@ class Resource(wsgi.Application):
def __init__(self, controller, action_peek=None, inherits=None,
**deserializers):
"""
:param controller: object that implement methods created by routes lib
:param action_peek: dictionary of routines for peeking into an action
request body to determine the desired action
:param inherits: another resource object that this resource should
inherit extensions from. Any action extensions that
are applied to the parent resource will also apply
to this resource.
""":param controller: object that implement methods created by routes
lib
:param action_peek: dictionary of routines for peeking into an
action request body to determine the
desired action
:param inherits: another resource object that this resource should
inherit extensions from. Any action extensions that
are applied to the parent resource will also apply
to this resource.
"""
self.controller = controller
@ -1255,14 +1251,10 @@ class Fault(webob.exc.HTTPException):
class RateLimitFault(webob.exc.HTTPException):
"""
Rate-limited request response.
"""
"""Rate-limited request response."""
def __init__(self, message, details, retry_time):
"""
Initialize new `RateLimitFault` with relevant information.
"""
"""Initialize new `RateLimitFault` with relevant information."""
hdrs = RateLimitFault._retry_after(retry_time)
self.wrapped_exc = webob.exc.HTTPTooManyRequests(headers=hdrs)
self.content = {
@ -1283,9 +1275,8 @@ class RateLimitFault(webob.exc.HTTPException):
@webob.dec.wsgify(RequestClass=Request)
def __call__(self, request):
"""
Return the wrapped exception with a serialized body conforming to our
error format.
"""Return the wrapped exception with a serialized body conforming
to our error format.
"""
user_locale = request.best_match_language()
content_type = request.best_match_content_type()

View File

@ -888,9 +888,7 @@ class TemplateBuilder(object):
def make_links(parent, selector=None):
"""
Attach an Atom <links> element to the parent.
"""
"""Attach an Atom <links> element to the parent."""
elem = SubTemplateElement(parent, '{%s}link' % XMLNS_ATOM,
selector=selector)
@ -905,8 +903,7 @@ def make_links(parent, selector=None):
def make_flat_dict(name, selector=None, subselector=None,
ns=None, colon_ns=False, root=None,
ignore_sub_dicts=False):
"""
Utility for simple XML templates that traditionally used
"""Utility for simple XML templates that traditionally used
XMLDictSerializer with no metadata. Returns a template element
where the top-level element has the given tag name, and where
sub-elements have tag names derived from the object's keys and

View File

@ -37,9 +37,10 @@ CONF.register_opt(max_request_body_size_opt)
class LimitingReader(object):
"""Reader to limit the size of an incoming request."""
def __init__(self, data, limit):
"""
:param data: Underlying data object
:param limit: maximum number of bytes the reader should allow
"""Initialize a new `LimitingReader`.
:param data: underlying data object
:param limit: maximum number of bytes the reader should allow
"""
self.data = data
self.limit = limit

View File

@ -22,8 +22,7 @@ from validators import _SchemaValidator
def schema(request_body_schema):
"""
Register a schema to validate request body.
"""Register a schema to validate request body.
Registered schema will be used for validating request body just before
API method executing.

View File

@ -274,8 +274,7 @@ class CellsManager(manager.Manager):
return service
def get_host_uptime(self, ctxt, host_name):
"""
Return host uptime for a compute host in a certain cell
"""Return host uptime for a compute host in a certain cell
:param host_name: fully qualified hostname. It should be in format of
parent!child@host_id
@ -286,8 +285,7 @@ class CellsManager(manager.Manager):
return response.value_or_raise()
def service_update(self, ctxt, host_name, binary, params_to_update):
"""
Used to enable/disable a service. For compute services, setting to
"""Used to enable/disable a service. For compute services, setting to
disabled stops new builds arriving on that host.
:param host_name: the name of the host machine that the service is

View File

@ -732,8 +732,7 @@ class _TargetedMessageMethods(_BaseMessageMethods):
return jsonutils.to_primitive(service)
def service_update(self, message, host_name, binary, params_to_update):
"""
Used to enable/disable a service. For compute services, setting to
"""Used to enable/disable a service. For compute services, setting to
disabled stops new builds arriving on that host.
:param host_name: the name of the host machine that the service is
@ -1509,8 +1508,7 @@ class MessageRunner(object):
def service_update(self, ctxt, cell_name, host_name, binary,
params_to_update):
"""
Used to enable/disable a service. For compute services, setting to
"""Used to enable/disable a service. For compute services, setting to
disabled stops new builds arriving on that host.
:param host_name: the name of the host machine that the service is

View File

@ -244,8 +244,7 @@ class CellsAPI(object):
return cctxt.call(context, 'get_host_uptime', host_name=host_name)
def service_update(self, ctxt, host_name, binary, params_to_update):
"""
Used to enable/disable a service. For compute services, setting to
"""Used to enable/disable a service. For compute services, setting to
disabled stops new builds arriving on that host.
:param host_name: the name of the host machine that the service is

View File

@ -421,8 +421,7 @@ class CellStateManager(base.Base):
class CellStateManagerDB(CellStateManager):
@utils.synchronized('cell-db-sync')
def _cell_data_sync(self, force=False):
"""
Update cell status for all cells from the backing data store
"""Update cell status for all cells from the backing data store
when necessary.
:param force: If True, cell status will be updated regardless
@ -456,8 +455,7 @@ class CellStateManagerFile(CellStateManager):
super(CellStateManagerFile, self).__init__(cell_state_cls)
def _cell_data_sync(self, force=False):
"""
Update cell status for all cells from the backing data store
"""Update cell status for all cells from the backing data store
when necessary.
:param force: If True, cell status will be updated regardless

View File

@ -38,8 +38,7 @@ class RamByInstanceTypeWeigher(weights.BaseCellWeigher):
return CONF.cells.ram_weight_multiplier
def _weigh_object(self, cell, weight_properties):
"""
Use the 'ram_free' for a particular instance_type advertised from a
"""Use the 'ram_free' for a particular instance_type advertised from a
child cell's capacity to compute a weight. We want to direct the
build to a cell with a higher capacity. Since higher weights win,
we just return the number of units available for the instance_type.

View File

@ -33,8 +33,7 @@ CONF.register_opts(weigher_opts, group='cells')
class WeightOffsetWeigher(weights.BaseCellWeigher):
"""
Weight cell by weight_offset db field.
"""Weight cell by weight_offset db field.
Originally designed so you can set a default cell by putting
its weight_offset to 999999999999999 (highest weight wins)
"""

View File

@ -223,8 +223,7 @@ class ProjectCommands(object):
@args('--key', metavar='<key>', help='Key')
@args('--value', metavar='<value>', help='Value')
def quota(self, project_id, user_id=None, key=None, value=None):
"""
Create, update or display quotas for project/user
"""Create, update or display quotas for project/user
If no quota key is provided, the quota will be displayed.
If a valid quota key is provided and it does not exist,
@ -401,8 +400,7 @@ class FloatingIpCommands(object):
@staticmethod
def address_to_hosts(addresses):
"""
Iterate over hosts within an address range.
"""Iterate over hosts within an address range.
If an explicit range specifier is missing, the parameter is
interpreted as a specific individual address.
@ -679,8 +677,8 @@ class ServiceCommands(object):
@args('--host', metavar='<host>', help='Host')
@args('--service', metavar='<service>', help='Nova service')
def list(self, host=None, service=None):
"""
Show a list of all running services. Filter by host & service name.
"""Show a list of all running services. Filter by host & service
name
"""
servicegroup_api = servicegroup.API()
ctxt = context.get_admin_context()

View File

@ -40,9 +40,8 @@ def API(*args, **kwargs):
def HostAPI(*args, **kwargs):
"""
Returns the 'HostAPI' class from the same module as the configured compute
api
"""Returns the 'HostAPI' class from the same module as the configured
compute api
"""
importutils = nova.openstack.common.importutils
compute_api_class_name = _get_compute_api_class_name()
@ -52,8 +51,7 @@ def HostAPI(*args, **kwargs):
def InstanceActionAPI(*args, **kwargs):
"""
Returns the 'InstanceActionAPI' class from the same module as the
"""Returns the 'InstanceActionAPI' class from the same module as the
configured compute api.
"""
importutils = nova.openstack.common.importutils

View File

@ -219,8 +219,7 @@ def check_instance_cell(fn):
def _diff_dict(orig, new):
"""
Return a dict describing how to change orig to new. The keys
"""Return a dict describing how to change orig to new. The keys
correspond to values that have changed; the value will be a list
of one or two elements. The first element of the list will be
either '+' or '-', indicating whether the key was updated or
@ -441,8 +440,7 @@ class API(base.Base):
raise exception.InvalidMetadataSize(reason=msg)
def _check_requested_secgroups(self, context, secgroups):
"""
Check if the security group requested exists and belongs to
"""Check if the security group requested exists and belongs to
the project.
"""
for secgroup in secgroups:
@ -455,8 +453,7 @@ class API(base.Base):
def _check_requested_networks(self, context, requested_networks,
max_count):
"""
Check if the networks requested belongs to the project
"""Check if the networks requested belongs to the project
and the fixed IP address for each network provided is within
same the network block
"""
@ -1267,8 +1264,7 @@ class API(base.Base):
block_device_mapping=None, access_ip_v4=None,
access_ip_v6=None, requested_networks=None, config_drive=None,
auto_disk_config=None, scheduler_hints=None, legacy_bdm=True):
"""
Provision instances, sending instance information to the
"""Provision instances, sending instance information to the
scheduler. The scheduler will determine where the instance(s)
go and will handle creating the DB entries.
@ -2110,8 +2106,7 @@ class API(base.Base):
context, None, None, image)
def _reset_image_metadata():
"""
Remove old image properties that we're storing as instance
"""Remove old image properties that we're storing as instance
system metadata. These properties start with 'image_'.
Then add the properties for the new image.
"""
@ -2234,8 +2229,7 @@ class API(base.Base):
@staticmethod
def _resize_quota_delta(context, new_flavor,
old_flavor, sense, compare):
"""
Calculate any quota adjustment required at a particular point
"""Calculate any quota adjustment required at a particular point
in the resize cycle.
:param context: the request context
@ -2261,15 +2255,13 @@ class API(base.Base):
@staticmethod
def _upsize_quota_delta(context, new_flavor, old_flavor):
"""
Calculate deltas required to adjust quota for an instance upsize.
"""Calculate deltas required to adjust quota for an instance upsize.
"""
return API._resize_quota_delta(context, new_flavor, old_flavor, 1, 1)
@staticmethod
def _reverse_upsize_quota_delta(context, migration_ref):
"""
Calculate deltas required to reverse a prior upsizing
"""Calculate deltas required to reverse a prior upsizing
quota adjustment.
"""
old_flavor = flavor_obj.Flavor.get_by_id(
@ -2281,8 +2273,7 @@ class API(base.Base):
@staticmethod
def _downsize_quota_delta(context, instance):
"""
Calculate deltas required to adjust quota for an instance downsize.
"""Calculate deltas required to adjust quota for an instance downsize.
"""
old_flavor = instance.get_flavor('old')
new_flavor = instance.get_flavor('new')
@ -3478,8 +3469,7 @@ class KeypairAPI(base.Base):
class SecurityGroupAPI(base.Base, security_group_base.SecurityGroupBase):
"""
Sub-set of the Compute API related to managing security groups
"""Sub-set of the Compute API related to managing security groups
and security group rules
"""
@ -3491,8 +3481,7 @@ class SecurityGroupAPI(base.Base, security_group_base.SecurityGroupBase):
self.security_group_rpcapi = compute_rpcapi.SecurityGroupAPI()
def validate_property(self, value, property, allowed):
"""
Validate given security group property.
"""Validate given security group property.
:param value: the value to validate, as a string or unicode
:param property: the property, either 'name' or 'description'

View File

@ -536,8 +536,7 @@ class HostAPI(compute_api.HostAPI):
db_service)
def service_update(self, context, host_name, binary, params_to_update):
"""
Used to enable/disable a service. For compute services, setting to
"""Used to enable/disable a service. For compute services, setting to
disabled stops new builds arriving on that host.
:param host_name: the name of the host machine that the service is

View File

@ -588,8 +588,7 @@ class ComputeManager(manager.Manager):
return shared_storage
def _complete_partial_deletion(self, context, instance):
"""
Complete deletion for instances in DELETED status but not marked as
"""Complete deletion for instances in DELETED status but not marked as
deleted in the DB
"""
instance.destroy()
@ -2698,8 +2697,7 @@ class ComputeManager(manager.Manager):
@reverts_task_state
@wrap_instance_event
def rescue_instance(self, context, instance, rescue_password):
"""
Rescue an instance on this host.
"""Rescue an instance on this host.
:param rescue_password: password to set on rescue instance
"""
context = context.elevated()

View File

@ -295,8 +295,7 @@ def notify_usage_exists(notifier, context, instance_ref, current_period=False,
def notify_about_instance_usage(notifier, context, instance, event_suffix,
network_info=None, system_metadata=None,
extra_usage_info=None):
"""
Send a notification about an instance.
"""Send a notification about an instance.
:param notifier: a messaging.Notifier
:param event_suffix: Event type like "delete.start" or "exists"
@ -321,8 +320,7 @@ def notify_about_instance_usage(notifier, context, instance, event_suffix,
def notify_about_aggregate_update(context, event_suffix, aggregate_payload):
"""
Send a notification about aggregate update.
"""Send a notification about aggregate update.
:param event_suffix: Event type like "create.start" or "create.end"
:param aggregate_payload: payload for aggregate update
@ -342,8 +340,7 @@ def notify_about_aggregate_update(context, event_suffix, aggregate_payload):
def notify_about_host_update(context, event_suffix, host_payload):
"""
Send a notification about host update.
"""Send a notification about host update.
:param event_suffix: Event type like "create.start" or "create.end"
:param host_payload: payload for host update. It is a dict and there

View File

@ -38,9 +38,7 @@ class NovaWebSocketProxy(websockify.WebSocketProxy):
ssl_target=None, *args, **kwargs)
def new_client(self):
"""
Called after a new WebSocket connection has been established.
"""
"""Called after a new WebSocket connection has been established."""
# Reopen the eventlet hub to make sure we don't share an epoll
# fd with parent and/or siblings, which would be bad
from eventlet import hubs

View File

@ -49,16 +49,16 @@ class RequestContext(object):
request_id=None, auth_token=None, overwrite=True,
quota_class=None, user_name=None, project_name=None,
service_catalog=None, instance_lock_checked=False, **kwargs):
"""
:param read_deleted: 'no' indicates deleted records are hidden, 'yes'
indicates deleted records are visible, 'only' indicates that
*only* deleted records are visible.
""":param read_deleted: 'no' indicates deleted records are hidden,
'yes' indicates deleted records are visible,
'only' indicates that *only* deleted records are visible.
:param overwrite: Set to False to ensure that the greenthread local
copy of the index is not overwritten.
:param kwargs: Extra arguments that might be present, but we ignore
because they possibly came in from older rpc messages.
:param overwrite: Set to False to ensure that the greenthread local
copy of the index is not overwritten.
:param kwargs: Extra arguments that might be present, but we ignore
because they possibly came in from older rpc messages.
"""
if kwargs:
LOG.warn(_('Arguments dropped when creating context: %s') %

View File

@ -442,8 +442,7 @@ def migration_get_by_instance_and_status(context, instance_uuid, status):
def migration_get_unconfirmed_by_dest_compute(context, confirm_window,
dest_compute, use_slave=False):
"""
Finds all unconfirmed migrations within the confirmation window for
"""Finds all unconfirmed migrations within the confirmation window for
a specific destination compute host.
"""
return IMPL.migration_get_unconfirmed_by_dest_compute(context,

View File

@ -1271,8 +1271,7 @@ def _fixed_ip_get_by_address(context, address, session=None,
@require_admin_context
def fixed_ip_get_by_address_detailed(context, address):
"""
:returns: a tuple of (models.FixedIp, models.Network, models.Instance)
""":returns: a tuple of (models.FixedIp, models.Network, models.Instance)
"""
try:
result = model_query(context, models.FixedIp,
@ -3439,8 +3438,7 @@ def _block_device_mapping_get_query(context, session=None,
def _scrub_empty_str_values(dct, keys_to_scrub):
"""
Remove any keys found in sequence keys_to_scrub from the dict
"""Remove any keys found in sequence keys_to_scrub from the dict
if they have the value ''.
"""
for key in keys_to_scrub:
@ -3579,8 +3577,7 @@ def _security_group_get_query(context, session=None, read_deleted=None,
def _security_group_get_by_names(context, session, project_id, group_names):
"""
Get security group models for a project by a list of names.
"""Get security group models for a project by a list of names.
Raise SecurityGroupNotFoundForProject for a name not found.
"""
query = _security_group_get_query(context, session=session,
@ -4241,8 +4238,7 @@ def _flavor_get_query(context, session=None, read_deleted=None):
def flavor_get_all(context, inactive=False, filters=None,
sort_key='flavorid', sort_dir='asc', limit=None,
marker=None):
"""
Returns all flavors.
"""Returns all flavors.
"""
filters = filters or {}

View File

@ -282,8 +282,7 @@ class Instance(BASE, NovaBase):
class InstanceInfoCache(BASE, NovaBase):
"""
Represents a cache of information about an instance
"""Represents a cache of information about an instance
"""
__tablename__ = 'instance_info_caches'
__table_args__ = (
@ -1349,8 +1348,7 @@ class InstanceGroup(BASE, NovaBase):
class PciDevice(BASE, NovaBase):
"""
Represents a PCI host device that can be passed through to instances.
"""Represents a PCI host device that can be passed through to instances.
"""
__tablename__ = 'pci_devices'
__table_args__ = (

View File

@ -183,10 +183,9 @@ def _drop_unique_constraint_in_sqlite(migrate_engine, table_name, uc_name,
def drop_unique_constraint(migrate_engine, table_name, uc_name, *columns,
**col_name_col_instance):
"""
This method drops UC from table and works for mysql, postgresql and sqlite.
In mysql and postgresql we are able to use "alter table" construction. In
sqlite is only one way to drop UC:
"""This method drops UC from table and works for mysql, postgresql and
sqlite. In mysql and postgresql we are able to use "alter table"
construction. In sqlite is only one way to drop UC:
1) Create new table with same columns, indexes and constraints
(except one that we want to drop).
2) Copy data from old table to new.
@ -215,8 +214,7 @@ def drop_unique_constraint(migrate_engine, table_name, uc_name, *columns,
def drop_old_duplicate_entries_from_table(migrate_engine, table_name,
use_soft_delete, *uc_column_names):
"""
This method is used to drop all old rows that have the same values for
"""This method is used to drop all old rows that have the same values for
columns in uc_columns.
"""
meta = MetaData()
@ -257,9 +255,8 @@ def drop_old_duplicate_entries_from_table(migrate_engine, table_name,
def check_shadow_table(migrate_engine, table_name):
"""
This method checks that table with ``table_name`` and corresponding shadow
table have same columns.
"""This method checks that table with ``table_name`` and
corresponding shadow table have same columns.
"""
meta = MetaData()
meta.bind = migrate_engine
@ -296,9 +293,8 @@ def check_shadow_table(migrate_engine, table_name):
def create_shadow_table(migrate_engine, table_name=None, table=None,
**col_name_col_instance):
"""
This method create shadow table for table with name ``table_name`` or table
instance ``table``.
"""This method create shadow table for table with name ``table_name``
or table instance ``table``.
:param table_name: Autoload table with this name and create shadow table
:param table: Autoloaded table, so just create corresponding shadow table.
:param col_name_col_instance: contains pair column_name=column_instance.

View File

@ -142,8 +142,7 @@ def _create_glance_client(context, host, port, use_ssl, version=1):
def get_api_servers():
"""
Shuffle a list of CONF.glance_api_servers and return an iterator
"""Shuffle a list of CONF.glance_api_servers and return an iterator
that will cycle through the list, looping around to the beginning
if necessary.
"""
@ -195,8 +194,7 @@ class GlanceClientWrapper(object):
self.use_ssl, version)
def call(self, context, version, method, *args, **kwargs):
"""
Call a glance client method. If we get a connection error,
"""Call a glance client method. If we get a connection error,
retry the request according to CONF.glance_num_retries.
"""
retry_excs = (glanceclient.exc.ServiceUnavailable,

View File

@ -46,11 +46,11 @@ CONF.register_opts(key_mgr_opts, group='keymgr')
class ConfKeyManager(single_key_mgr.SingleKeyManager):
"""
This key manager implementation supports all the methods specified by the
key manager interface. This implementation creates a single key in response
to all invocations of create_key. Side effects (e.g., raising exceptions)
for each method are handled as specified by the key manager interface.
"""This key manager implementation supports all the methods specified by
the key manager interface. This implementation creates a single key in
response to all invocations of create_key. Side effects
(e.g., raising exceptions) for each method are handled
as specified by the key manager interface.
"""
def __init__(self):

View File

@ -54,9 +54,7 @@ class Key(object):
class SymmetricKey(Key):
"""
This class represents symmetric keys
"""
"""This class represents symmetric keys."""
def __init__(self, alg, key):
"""Create a new SymmetricKey object.

View File

@ -41,8 +41,7 @@ LOG = logging.getLogger(__name__)
class MockKeyManager(key_mgr.KeyManager):
"""
This mock key manager implementation supports all the methods specified
"""This mock key manager implementation supports all the methods specified
by the key manager interface. This implementation stores keys within a
dictionary, and as a result, it is not acceptable for use across different
services. Side effects (e.g., raising exceptions) for each method are

View File

@ -29,11 +29,11 @@ LOG = logging.getLogger(__name__)
class SingleKeyManager(mock_key_mgr.MockKeyManager):
"""
This key manager implementation supports all the methods specified by the
key manager interface. This implementation creates a single key in response
to all invocations of create_key. Side effects (e.g., raising exceptions)
for each method are handled as specified by the key manager interface.
"""This key manager implementation supports all the methods specified by
the key manager interface. This implementation creates a single key in
response to all invocations of create_key. Side effects
(e.g., raising exceptions) for each method are handled as specified by
the key manager interface.
"""
def __init__(self):

View File

@ -25,8 +25,7 @@ CONF = cfg.CONF
def _get_my_ip():
"""
Returns the actual ip of the local machine.
"""Returns the actual ip of the local machine.
This code figures out what source address would be used if some traffic
were to be sent out to some well known address on the Internet. In this

View File

@ -36,8 +36,7 @@ LOG = logging.getLogger(__name__)
def refresh_cache(f):
"""
Decorator to update the instance_info_cache
"""Decorator to update the instance_info_cache
Requires context and instance as function args
"""

View File

@ -1388,8 +1388,7 @@ def get_dev(network):
class LinuxNetInterfaceDriver(object):
"""
Abstract class that defines generic network host API
"""Abstract class that defines generic network host API
for for all Linux interface drivers.
"""

View File

@ -28,8 +28,7 @@ LOG = logging.getLogger(__name__)
class MiniDNS(dns_driver.DNSDriver):
"""
Trivial DNS driver. This will read/write to a local, flat file
"""Trivial DNS driver. This will read/write to a local, flat file
and have no effect on your actual DNS system. This class is
strictly for testing purposes, and should keep you out of dependency
hell.

View File

@ -46,8 +46,7 @@ def pci_device_prop_match(pci_dev, specs):
def parse_address(address):
"""
Returns (domain, bus, slot, function) from PCI address that is stored in
"""Returns (domain, bus, slot, function) from PCI address that is stored in
PciDevice DB table.
"""
m = _PCI_ADDRESS_REGEX.match(address)

View File

@ -88,8 +88,7 @@ CONF.register_opts(quota_opts)
class DbQuotaDriver(object):
"""
Driver to perform necessary checks to enforce quotas and obtain
"""Driver to perform necessary checks to enforce quotas and obtain
quota information. The default driver utilizes the local
database.
"""
@ -127,8 +126,7 @@ class DbQuotaDriver(object):
def get_class_quotas(self, context, resources, quota_class,
defaults=True):
"""
Given a list of resources, retrieve the quotas for the given
"""Given a list of resources, retrieve the quotas for the given
quota class.
:param context: The request context, for access checks.
@ -201,8 +199,7 @@ class DbQuotaDriver(object):
quota_class=None, defaults=True,
usages=True, project_quotas=None,
user_quotas=None):
"""
Given a list of resources, retrieve the quotas for the given
"""Given a list of resources, retrieve the quotas for the given
user and project.
:param context: The request context, for access checks.
@ -244,8 +241,7 @@ class DbQuotaDriver(object):
def get_project_quotas(self, context, resources, project_id,
quota_class=None, defaults=True,
usages=True, remains=False, project_quotas=None):
"""
Given a list of resources, retrieve the quotas for the given
"""Given a list of resources, retrieve the quotas for the given
project.
:param context: The request context, for access checks.
@ -279,8 +275,7 @@ class DbQuotaDriver(object):
def get_settable_quotas(self, context, resources, project_id,
user_id=None):
"""
Given a list of resources, retrieve the range of settable quotas for
"""Given a list of resources, retrieve the range of settable quotas for
the given user or project.
:param context: The request context, for access checks.
@ -317,8 +312,7 @@ class DbQuotaDriver(object):
def _get_quotas(self, context, resources, keys, has_sync, project_id=None,
user_id=None, project_quotas=None):
"""
A helper method which retrieves the quotas for the specific
"""A helper method which retrieves the quotas for the specific
resources identified by keys, and which apply to the current
context.
@ -565,8 +559,7 @@ class DbQuotaDriver(object):
user_id=user_id)
def usage_reset(self, context, resources):
"""
Reset the usage records for a particular user on a list of
"""Reset the usage records for a particular user on a list of
resources. This will force that user's usage records to be
refreshed the next time a reservation is made.
@ -595,8 +588,7 @@ class DbQuotaDriver(object):
pass
def destroy_all_by_project_and_user(self, context, project_id, user_id):
"""
Destroy all quotas, usages, and reservations associated with a
"""Destroy all quotas, usages, and reservations associated with a
project and user.
:param context: The request context, for access checks.
@ -607,8 +599,7 @@ class DbQuotaDriver(object):
db.quota_destroy_all_by_project_and_user(context, project_id, user_id)
def destroy_all_by_project(self, context, project_id):
"""
Destroy all quotas, usages, and reservations associated with a
"""Destroy all quotas, usages, and reservations associated with a
project.
:param context: The request context, for access checks.
@ -665,8 +656,7 @@ class NoopQuotaDriver(object):
def get_class_quotas(self, context, resources, quota_class,
defaults=True):
"""
Given a list of resources, retrieve the quotas for the given
"""Given a list of resources, retrieve the quotas for the given
quota class.
:param context: The request context, for access checks.
@ -697,8 +687,7 @@ class NoopQuotaDriver(object):
def get_user_quotas(self, context, resources, project_id, user_id,
quota_class=None, defaults=True,
usages=True):
"""
Given a list of resources, retrieve the quotas for the given
"""Given a list of resources, retrieve the quotas for the given
user and project.
:param context: The request context, for access checks.
@ -722,8 +711,7 @@ class NoopQuotaDriver(object):
def get_project_quotas(self, context, resources, project_id,
quota_class=None, defaults=True,
usages=True, remains=False):
"""
Given a list of resources, retrieve the quotas for the given
"""Given a list of resources, retrieve the quotas for the given
project.
:param context: The request context, for access checks.
@ -747,8 +735,7 @@ class NoopQuotaDriver(object):
def get_settable_quotas(self, context, resources, project_id,
user_id=None):
"""
Given a list of resources, retrieve the range of settable quotas for
"""Given a list of resources, retrieve the range of settable quotas for
the given user or project.
:param context: The request context, for access checks.
@ -862,8 +849,7 @@ class NoopQuotaDriver(object):
pass
def usage_reset(self, context, resources):
"""
Reset the usage records for a particular user on a list of
"""Reset the usage records for a particular user on a list of
resources. This will force that user's usage records to be
refreshed the next time a reservation is made.
@ -878,8 +864,7 @@ class NoopQuotaDriver(object):
pass
def destroy_all_by_project_and_user(self, context, project_id, user_id):
"""
Destroy all quotas, usages, and reservations associated with a
"""Destroy all quotas, usages, and reservations associated with a
project and user.
:param context: The request context, for access checks.
@ -889,8 +874,7 @@ class NoopQuotaDriver(object):
pass
def destroy_all_by_project(self, context, project_id):
"""
Destroy all quotas, usages, and reservations associated with a
"""Destroy all quotas, usages, and reservations associated with a
project.
:param context: The request context, for access checks.
@ -913,8 +897,7 @@ class BaseResource(object):
"""Describe a single resource for quota checking."""
def __init__(self, name, flag=None):
"""
Initializes a Resource.
"""Initializes a Resource.
:param name: The name of the resource, i.e., "instances".
:param flag: The name of the flag or configuration option
@ -926,8 +909,7 @@ class BaseResource(object):
self.flag = flag
def quota(self, driver, context, **kwargs):
"""
Given a driver and context, obtain the quota for this
"""Given a driver and context, obtain the quota for this
resource.
:param driver: A quota driver.
@ -1023,14 +1005,12 @@ class AbsoluteResource(BaseResource):
class CountableResource(AbsoluteResource):
"""
Describe a resource where the counts aren't based solely on the
"""Describe a resource where the counts aren't based solely on the
project ID.
"""
def __init__(self, name, count, flag=None):
"""
Initializes a CountableResource.
"""Initializes a CountableResource.
Countable resources are those resources which directly
correspond to objects in the database, i.e., instances, cores,
@ -1185,8 +1165,7 @@ class QuotaEngine(object):
remains=remains)
def get_settable_quotas(self, context, project_id, user_id=None):
"""
Given a list of resources, retrieve the range of settable quotas for
"""Given a list of resources, retrieve the range of settable quotas for
the given user or project.
:param context: The request context, for access checks.
@ -1342,8 +1321,7 @@ class QuotaEngine(object):
LOG.debug(_("Rolled back reservations %s"), reservations)
def usage_reset(self, context, resources):
"""
Reset the usage records for a particular user on a list of
"""Reset the usage records for a particular user on a list of
resources. This will force that user's usage records to be
refreshed the next time a reservation is made.
@ -1359,8 +1337,7 @@ class QuotaEngine(object):
self._driver.usage_reset(context, resources)
def destroy_all_by_project_and_user(self, context, project_id, user_id):
"""
Destroy all quotas, usages, and reservations associated with a
"""Destroy all quotas, usages, and reservations associated with a
project and user.
:param context: The request context, for access checks.
@ -1372,8 +1349,7 @@ class QuotaEngine(object):
project_id, user_id)
def destroy_all_by_project(self, context, project_id):
"""
Destroy all quotas, usages, and reservations associated with a
"""Destroy all quotas, usages, and reservations associated with a
project.
:param context: The request context, for access checks.

View File

@ -40,8 +40,7 @@ class IsolatedHostsFilter(filters.BaseHostFilter):
run_filter_once_per_request = True
def host_passes(self, host_state, filter_properties):
"""
Result Matrix with 'restrict_isolated_hosts_to_isolated_images' set
"""Result Matrix with 'restrict_isolated_hosts_to_isolated_images' set
to True:
| isolated_image | non_isolated_image
-------------+----------------+-------------------

View File

@ -83,8 +83,7 @@ CONF.register_opts(trusted_opts, group=trust_group)
class HTTPSClientAuthConnection(httplib.HTTPSConnection):
"""
Class to make a HTTPS connection, with support for full client-based
"""Class to make a HTTPS connection, with support for full client-based
SSL Authentication
"""
@ -100,8 +99,7 @@ class HTTPSClientAuthConnection(httplib.HTTPSConnection):
self.timeout = timeout
def connect(self):
"""
Connect to a host on a given (SSL) port.
"""Connect to a host on a given (SSL) port.
If ca_file is pointing somewhere, use it to check Server Certificate.
Redefined/copied and extended from httplib.py:1105 (Python 2.6.x).

View File

@ -44,8 +44,7 @@ LOG = logging.getLogger(__name__)
class SchedulerOptions(object):
"""
SchedulerOptions monitors a local .json file for changes and loads it
"""SchedulerOptions monitors a local .json file for changes and loads it
if needed. This file is converted to a data structure and passed into
the filtering and weighing functions which can use it for dynamic
configuration.

View File

@ -72,8 +72,7 @@ class DbDriver(api.ServiceGroupDriver):
return abs(elapsed) <= CONF.service_down_time
def get_all(self, group_id):
"""
Returns ALL members of the given group
"""Returns ALL members of the given group
"""
LOG.debug(_('DB_Driver: get_all members of the %s group') % group_id)
rs = []

View File

@ -70,8 +70,7 @@ class MemcachedDriver(api.ServiceGroupDriver):
return self.mc.get(str(key)) is not None
def get_all(self, group_id):
"""
Returns ALL members of the given group
"""Returns ALL members of the given group
"""
LOG.debug(_('Memcached_Driver: get_all members of the %s group') %
group_id)

View File

@ -321,8 +321,7 @@ class TimeOverride(fixtures.Fixture):
class NoDBTestCase(TestCase):
"""
`NoDBTestCase` differs from TestCase in that DB access is not supported.
"""`NoDBTestCase` differs from TestCase in that DB access is not supported.
This makes tests run significantly faster. If possible, all new tests
should derive from this class.
"""

View File

@ -282,10 +282,9 @@ class ApiEc2TestCase(test.TestCase):
return self.http
def test_return_valid_isoformat(self):
"""
Ensure that the ec2 api returns datetime in xs:dateTime
(which apparently isn't datetime.isoformat())
NOTE(ken-pepple): https://bugs.launchpad.net/nova/+bug/721297
"""Ensure that the ec2 api returns datetime in xs:dateTime
(which apparently isn't datetime.isoformat())
NOTE(ken-pepple): https://bugs.launchpad.net/nova/+bug/721297
"""
conv = apirequest._database_to_isoformat
# sqlite database representation with microseconds
@ -438,8 +437,7 @@ class ApiEc2TestCase(test.TestCase):
'test group')
def test_authorize_revoke_security_group_cidr(self):
"""
Test that we can add and remove CIDR based rules
"""Test that we can add and remove CIDR based rules
to a security group
"""
self.expect_http()
@ -542,8 +540,7 @@ class ApiEc2TestCase(test.TestCase):
self.assertEqual(rv[0].name, 'default')
def test_authorize_revoke_security_group_cidr_v6(self):
"""
Test that we can add and remove CIDR based rules
"""Test that we can add and remove CIDR based rules
to a security group for IPv6
"""
self.expect_http()
@ -594,8 +591,7 @@ class ApiEc2TestCase(test.TestCase):
self.assertEqual(rv[0].name, 'default')
def test_authorize_revoke_security_group_foreign_group(self):
"""
Test that we can grant and revoke another security group access
"""Test that we can grant and revoke another security group access
to a security group
"""
self.expect_http()

View File

@ -2439,8 +2439,7 @@ class CloudTestCase(test.TestCase):
self._do_test_create_image(False)
def test_create_image_instance_store(self):
"""
Ensure CreateImage fails as expected for an instance-store-backed
"""Ensure CreateImage fails as expected for an instance-store-backed
instance
"""
# enforce periodic tasks run in short time to avoid wait for 60s.

View File

@ -39,8 +39,7 @@ class TestServerExceptionEC2(Exception):
class Ec2ErrorResponseTestCase(test.NoDBTestCase):
"""
Test EC2 error responses.
"""Test EC2 error responses.
This deals mostly with api/ec2/__init__.py code, especially
the ec2_error_ex helper.
@ -85,17 +84,14 @@ class Ec2ErrorResponseTestCase(test.NoDBTestCase):
self.assertEqual(requestid_e.text, self.context.request_id)
def test_exception_ec2_4xx(self):
"""
Test response to EC2 exception with code = 400.
"""
"""Test response to EC2 exception with code = 400."""
msg = "Test client failure."
err = ec2.ec2_error_ex(TestClientExceptionEC2(msg), self.req)
self._validate_ec2_error(err, TestClientExceptionEC2.code,
TestClientExceptionEC2.ec2_code, msg)
def test_exception_ec2_5xx(self):
"""
Test response to EC2 exception with code = 500.
"""Test response to EC2 exception with code = 500.
Expected errors are treated as client ones even with 5xx code.
"""
@ -105,9 +101,7 @@ class Ec2ErrorResponseTestCase(test.NoDBTestCase):
msg)
def test_unexpected_exception_ec2_4xx(self):
"""
Test response to unexpected EC2 exception with code = 400.
"""
"""Test response to unexpected EC2 exception with code = 400."""
msg = "Test unexpected client failure."
err = ec2.ec2_error_ex(TestClientExceptionEC2(msg), self.req,
unexpected=True)
@ -115,8 +109,7 @@ class Ec2ErrorResponseTestCase(test.NoDBTestCase):
TestClientExceptionEC2.ec2_code, msg)
def test_unexpected_exception_ec2_5xx(self):
"""
Test response to unexpected EC2 exception with code = 500.
"""Test response to unexpected EC2 exception with code = 500.
Server exception messages (with code >= 500 or without code) should
be filtered as they might contain sensitive information.
@ -129,8 +122,7 @@ class Ec2ErrorResponseTestCase(test.NoDBTestCase):
unknown_msg=True)
def test_unexpected_exception_builtin(self):
"""
Test response to builtin unexpected exception.
"""Test response to builtin unexpected exception.
Server exception messages (with code >= 500 or without code) should
be filtered as they might contain sensitive information.

View File

@ -41,8 +41,7 @@ floating_ip_id = '1'
def _quote_domain(domain):
"""
Domain names tend to have .'s in them. Urllib doesn't quote dots,
"""Domain names tend to have .'s in them. Urllib doesn't quote dots,
but Routes tends to choke on them, so we need an extra level of
by-hand quoting here. This function needs to duplicate the one in
python-novaclient/novaclient/v1_1/floating_ip_dns.py

View File

@ -39,9 +39,8 @@ def stub_service_get_by_host_and_topic(context, host_name, topic):
def stub_set_host_enabled(context, host_name, enabled):
"""
Simulates three possible behaviours for VM drivers or compute drivers when
enabling or disabling a host.
"""Simulates three possible behaviours for VM drivers or compute
drivers when enabling or disabling a host.
'enabled' means new instances can go to this host
'disabled' means they can't

View File

@ -102,8 +102,7 @@ class BlockDeviceMappingTest(test.TestCase):
override_controller=self.no_volumes_controller)
def test_create_instance_with_volumes_enabled_no_image(self):
"""
Test that the create will fail if there is no image
"""Test that the create will fail if there is no image
and no bdms supplied in the request
"""
old_create = compute_api.API.create

View File

@ -525,9 +525,7 @@ class FlavorDisabledTest(test.TestCase):
class DisabledFlavorsWithRealDBTest(test.TestCase):
"""
Tests that disabled flavors should not be shown nor listed.
"""
"""Tests that disabled flavors should not be shown nor listed."""
def setUp(self):
super(DisabledFlavorsWithRealDBTest, self).setUp()
self.controller = flavors.FlavorsController()
@ -588,12 +586,11 @@ class DisabledFlavorsWithRealDBTest(test.TestCase):
self.assertEqual(db_flavorids, api_flavorids)
def test_show_should_include_disabled_flavor_for_user(self):
"""
Counterintuitively we should show disabled flavors to all users and not
just admins. The reason is that, when a user performs a server-show
request, we want to be able to display the pretty flavor name ('512 MB
Instance') and not just the flavor-id even if the flavor id has been
marked disabled.
"""Counterintuitively we should show disabled flavors to all users
and not just admins. The reason is that, when a user performs a
server-show request, we want to be able to display the pretty
flavor name ('512 MB Instance') and not just the flavor-id even if
the flavor id has been marked disabled.
"""
self.context.is_admin = False

View File

@ -37,9 +37,8 @@ def stub_service_get_by_host_and_topic(context, host_name, topic):
def stub_set_host_enabled(context, host_name, enabled):
"""
Simulates three possible behaviours for VM drivers or compute drivers when
enabling or disabling a host.
"""Simulates three possible behaviours for VM drivers or compute
drivers when enabling or disabling a host.
'enabled' means new instances can go to this host
'disabled' means they can't

View File

@ -407,8 +407,7 @@ class ServersControllerCreateTest(test.TestCase):
self.assertTrue(len(reservation_id) > 1)
def test_create_multiple_instances_with_multiple_volume_bdm(self):
"""
Test that a BadRequest is raised if multiple instances
"""Test that a BadRequest is raised if multiple instances
are requested with a list of block device mappings for volumes.
"""
min_count = 2
@ -431,8 +430,7 @@ class ServersControllerCreateTest(test.TestCase):
self._test_create_extra, params, no_image=True)
def test_create_multiple_instances_with_single_volume_bdm(self):
"""
Test that a BadRequest is raised if multiple instances
"""Test that a BadRequest is raised if multiple instances
are requested to boot from a single volume.
"""
min_count = 2

View File

@ -1229,12 +1229,11 @@ class ServersControllerTest(ControllerTest):
self.assertEqual(s['metadata']['seq'], str(i + 1))
def test_get_all_server_details_with_host(self):
'''
We want to make sure that if two instances are on the same host, then
they return the same host_id. If two instances are on different hosts,
they should return different host_ids. In this test, there are 5
instances - 2 on one host and 3 on another.
'''
"""We want to make sure that if two instances are on the same host,
then they return the same host_id. If two instances are on different
hosts, they should return different host_ids. In this test,
there are 5 instances - 2 on one host and 3 on another.
"""
def return_servers_with_host(context, *args, **kwargs):
return [fakes.stub_instance(i + 1, 'fake', 'fake', host=i % 2,
@ -2896,8 +2895,7 @@ class ServersViewBuilderTest(test.TestCase):
class ServersAllExtensionsTestCase(test.TestCase):
"""
Servers tests using default API router with all extensions enabled.
"""Servers tests using default API router with all extensions enabled.
The intent here is to catch cases where extensions end up throwing
an exception because of a malformed request before the core API
@ -2957,9 +2955,7 @@ class ServersAllExtensionsTestCase(test.TestCase):
class ServersInvalidRequestTestCase(test.TestCase):
"""
Tests of places we throw 400 Bad Request from
"""
"""Tests of places we throw 400 Bad Request from."""
def setUp(self):
super(ServersInvalidRequestTestCase, self).setUp()

View File

@ -695,9 +695,7 @@ class FlavorsXMLSerializationTest(test.TestCase):
class DisabledFlavorsWithRealDBTest(test.TestCase):
"""
Tests that disabled flavors should not be shown nor listed.
"""
"""Tests that disabled flavors should not be shown nor listed."""
def setUp(self):
super(DisabledFlavorsWithRealDBTest, self).setUp()
self.controller = flavors.Controller()
@ -759,9 +757,8 @@ class DisabledFlavorsWithRealDBTest(test.TestCase):
self.assertEqual(db_flavorids, api_flavorids)
def test_show_should_include_disabled_flavor_for_user(self):
"""
Counterintuitively we should show disabled flavors to all users and not
just admins. The reason is that, when a user performs a server-show
"""Counterintuitively we should show disabled flavors to all users and
not just admins. The reason is that, when a user performs a server-show
request, we want to be able to display the pretty flavor name ('512 MB
Instance') and not just the flavor-id even if the flavor id has been
marked disabled.

View File

@ -39,8 +39,7 @@ NOW_API_FORMAT = "2010-10-11T10:30:22Z"
class ImagesControllerTest(test.NoDBTestCase):
"""
Test of the OpenStack API /images application controller w/Glance.
"""Test of the OpenStack API /images application controller w/Glance.
"""
def setUp(self):

View File

@ -73,9 +73,7 @@ class BaseLimitTestSuite(test.NoDBTestCase):
class LimitsControllerTest(BaseLimitTestSuite):
"""
Tests for `limits.LimitsController` class.
"""
"""Tests for `limits.LimitsController` class."""
def setUp(self):
"""Run before each test."""
@ -321,9 +319,7 @@ class MockLimiter(limits.Limiter):
class LimitMiddlewareTest(BaseLimitTestSuite):
"""
Tests for the `limits.RateLimitingMiddleware` class.
"""
"""Tests for the `limits.RateLimitingMiddleware` class."""
@webob.dec.wsgify
def _empty_app(self, request):
@ -397,9 +393,7 @@ class LimitMiddlewareTest(BaseLimitTestSuite):
class LimitTest(BaseLimitTestSuite):
"""
Tests for the `limits.Limit` class.
"""
"""Tests for the `limits.Limit` class."""
def test_GET_no_delay(self):
# Test a limit handles 1 GET per second.
@ -429,8 +423,7 @@ class LimitTest(BaseLimitTestSuite):
class ParseLimitsTest(BaseLimitTestSuite):
"""
Tests for the default limits parser in the in-memory
"""Tests for the default limits parser in the in-memory
`limits.Limiter` class.
"""
@ -495,9 +488,7 @@ class ParseLimitsTest(BaseLimitTestSuite):
class LimiterTest(BaseLimitTestSuite):
"""
Tests for the in-memory `limits.Limiter` class.
"""
"""Tests for the in-memory `limits.Limiter` class."""
def setUp(self):
"""Run before each test."""
@ -518,8 +509,7 @@ class LimiterTest(BaseLimitTestSuite):
return sum(item for item in results if item)
def test_no_delay_GET(self):
"""
Simple test to ensure no delay on a single call for a limit verb we
"""Simple test to ensure no delay on a single call for a limit verb we
didn"t set.
"""
delay = self.limiter.check_for_delay("GET", "/anything")
@ -531,8 +521,7 @@ class LimiterTest(BaseLimitTestSuite):
self.assertEqual(delay, (None, None))
def test_delay_PUT(self):
"""
Ensure the 11th PUT will result in a delay of 6.0 seconds until
"""Ensure the 11th PUT will result in a delay of 6.0 seconds until
the next request will be granced.
"""
expected = [None] * 10 + [6.0]
@ -541,8 +530,7 @@ class LimiterTest(BaseLimitTestSuite):
self.assertEqual(expected, results)
def test_delay_POST(self):
"""
Ensure the 8th POST will result in a delay of 6.0 seconds until
"""Ensure the 8th POST will result in a delay of 6.0 seconds until
the next request will be granced.
"""
expected = [None] * 7
@ -564,10 +552,9 @@ class LimiterTest(BaseLimitTestSuite):
self.assertEqual(expected, results)
def test_delay_PUT_servers(self):
"""
Ensure PUT on /servers limits at 5 requests, and PUT elsewhere is still
OK after 5 requests...but then after 11 total requests, PUT limiting
kicks in.
"""Ensure PUT on /servers limits at 5 requests, and PUT elsewhere is
still OK after 5 requests...but then after 11 total requests, PUT
limiting kicks in.
"""
# First 6 requests on PUT /servers
expected = [None] * 5 + [12.0]
@ -580,8 +567,7 @@ class LimiterTest(BaseLimitTestSuite):
self.assertEqual(expected, results)
def test_delay_PUT_wait(self):
"""
Ensure after hitting the limit and then waiting for the correct
"""Ensure after hitting the limit and then waiting for the correct
amount of time, the limit will be lifted.
"""
expected = [None] * 10 + [6.0]
@ -665,9 +651,7 @@ class LimiterTest(BaseLimitTestSuite):
class WsgiLimiterTest(BaseLimitTestSuite):
"""
Tests for `limits.WsgiLimiter` class.
"""
"""Tests for `limits.WsgiLimiter` class."""
def setUp(self):
"""Run before each test."""
@ -736,9 +720,7 @@ class WsgiLimiterTest(BaseLimitTestSuite):
class FakeHttplibSocket(object):
"""
Fake `httplib.HTTPResponse` replacement.
"""
"""Fake `httplib.HTTPResponse` replacement."""
def __init__(self, response_string):
"""Initialize new `FakeHttplibSocket`."""
@ -750,20 +732,15 @@ class FakeHttplibSocket(object):
class FakeHttplibConnection(object):
"""
Fake `httplib.HTTPConnection`.
"""
"""Fake `httplib.HTTPConnection`."""
def __init__(self, app, host):
"""
Initialize `FakeHttplibConnection`.
"""
"""Initialize `FakeHttplibConnection`."""
self.app = app
self.host = host
def request(self, method, path, body="", headers=None):
"""
Requests made via this connection actually get translated and routed
"""Requests made via this connection actually get translated and routed
into our WSGI app, we then wait for the response and turn it back into
an `httplib.HTTPResponse`.
"""
@ -826,13 +803,10 @@ def wire_HTTPConnection_to_WSGI(host, app):
class WsgiLimiterProxyTest(BaseLimitTestSuite):
"""
Tests for the `limits.WsgiLimiterProxy` class.
"""
"""Tests for the `limits.WsgiLimiterProxy` class."""
def setUp(self):
"""
Do some nifty HTTP/WSGI magic which allows for WSGI to be called
"""Do some nifty HTTP/WSGI magic which allows for WSGI to be called
directly by something like the `httplib` library.
"""
super(WsgiLimiterProxyTest, self).setUp()

View File

@ -1141,12 +1141,11 @@ class ServersControllerTest(ControllerTest):
self.assertEqual(s['metadata']['seq'], str(i + 1))
def test_get_all_server_details_with_host(self):
'''
We want to make sure that if two instances are on the same host, then
they return the same hostId. If two instances are on different hosts,
they should return different hostId's. In this test, there are 5
instances - 2 on one host and 3 on another.
'''
"""We want to make sure that if two instances are on the same host,
then they return the same hostId. If two instances are on different
hosts, they should return different hostId's. In this test, there
are 5 instances - 2 on one host and 3 on another.
"""
def return_servers_with_host(context, *args, **kwargs):
return [fakes.stub_instance(i + 1, 'fake', 'fake', host=i % 2,
@ -2002,8 +2001,7 @@ class ServersControllerCreateTest(test.TestCase):
self.assertTrue(len(reservation_id) > 1)
def test_create_multiple_instances_with_multiple_volume_bdm(self):
"""
Test that a BadRequest is raised if multiple instances
"""Test that a BadRequest is raised if multiple instances
are requested with a list of block device mappings for volumes.
"""
self.ext_mgr.extensions = {'os-multiple-create': 'fake'}
@ -2027,8 +2025,7 @@ class ServersControllerCreateTest(test.TestCase):
self._test_create_extra, params, no_image=True)
def test_create_multiple_instances_with_single_volume_bdm(self):
"""
Test that a BadRequest is raised if multiple instances
"""Test that a BadRequest is raised if multiple instances
are requested to boot from a single volume.
"""
self.ext_mgr.extensions = {'os-multiple-create': 'fake'}
@ -2505,8 +2502,7 @@ class ServersControllerCreateTest(test.TestCase):
self._test_create_extra(params)
def test_create_instance_with_volumes_enabled_no_image(self):
"""
Test that the create will fail if there is no image
"""Test that the create will fail if there is no image
and no bdms supplied in the request
"""
self.ext_mgr.extensions = {'os-volumes': 'fake'}
@ -2533,8 +2529,7 @@ class ServersControllerCreateTest(test.TestCase):
self._test_create_extra, {}, no_image=True)
def test_create_instance_with_volumes_enabled_and_bdms_no_image(self):
"""
Test that the create works if there is no image supplied but
"""Test that the create works if there is no image supplied but
os-volumes extension is enabled and bdms are supplied
"""
self.ext_mgr.extensions = {'os-volumes': 'fake'}
@ -4657,8 +4652,7 @@ class ServerXMLSerializationTest(test.TestCase):
class ServersAllExtensionsTestCase(test.TestCase):
"""
Servers tests using default API router with all extensions enabled.
"""Servers tests using default API router with all extensions enabled.
The intent here is to catch cases where extensions end up throwing
an exception because of a malformed request before the core API
@ -4717,9 +4711,7 @@ class ServersAllExtensionsTestCase(test.TestCase):
class ServersUnprocessableEntityTestCase(test.TestCase):
"""
Tests of places we throw 422 Unprocessable Entity from
"""
"""Tests of places we throw 422 Unprocessable Entity from."""
def setUp(self):
super(ServersUnprocessableEntityTestCase, self).setUp()

View File

@ -435,8 +435,7 @@ class VersionsTest(test.NoDBTestCase):
[{'rel': 'self', 'href': 'http://localhost/v3/images/1'}]))
def test_multi_choice_server_atom(self):
"""
Make sure multi choice responses do not have content-type
"""Make sure multi choice responses do not have content-type
application/atom+xml (should use default of json)
"""
req = webob.Request.blank('/servers')

View File

@ -288,9 +288,8 @@ def _make_image_fixtures():
def stub_out_glanceclient_create(stubs, sent_to_glance):
"""
We return the metadata sent to glance by modifying the sent_to_glance dict
in place.
"""We return the metadata sent to glance by modifying the sent_to_glance
dict in place
"""
orig_add_image = glanceclient.v1.images.ImageManager.create

View File

@ -36,10 +36,9 @@ ATOMNS = "{http://www.w3.org/2005/Atom}"
class LimiterTest(test.TestCase):
"""
Unit tests for the `nova.api.openstack.common.limited` method which takes
in a list of items and, depending on the 'offset' and 'limit' GET params,
returns a subset or complete set of the given items.
"""Unit tests for the `nova.api.openstack.common.limited` method which
takes in a list of items and, depending on the 'offset' and 'limit' GET
params, returns a subset or complete set of the given items.
"""
def setUp(self):
@ -160,8 +159,7 @@ class LimiterTest(test.TestCase):
class PaginationParamsTest(test.TestCase):
"""
Unit tests for the `nova.api.openstack.common.get_pagination_params`
"""Unit tests for the `nova.api.openstack.common.get_pagination_params`
method which takes in a request object and returns 'marker' and 'limit'
GET params.
"""

View File

@ -106,8 +106,7 @@ def fake_not_implemented(*args, **kwargs):
def get_primitive_instance_by_uuid(context, instance_uuid):
"""
Helper method to get an instance and then convert it to
"""Helper method to get an instance and then convert it to
a primitive form using jsonutils.
"""
instance = db.instance_get_by_uuid(context, instance_uuid)
@ -1670,8 +1669,7 @@ class ComputeTestCase(BaseTestCase):
self.assertEqual(len(bdms), 0)
def test_run_terminate_no_image(self):
"""
Make sure instance started without image (from volume)
"""Make sure instance started without image (from volume)
can be termintad without issues
"""
params = {'image_ref': ''}
@ -2604,8 +2602,7 @@ class ComputeTestCase(BaseTestCase):
self._objectify(inst_ref), [], [])
def test_set_admin_password_driver_not_authorized(self):
"""
Ensure expected exception is raised if set_admin_password not
"""Ensure expected exception is raised if set_admin_password not
authorized.
"""
exc = exception.NotAuthorized(_('Internal error'))
@ -2616,8 +2613,7 @@ class ComputeTestCase(BaseTestCase):
expected_exception)
def test_set_admin_password_driver_not_implemented(self):
"""
Ensure expected exception is raised if set_admin_password not
"""Ensure expected exception is raised if set_admin_password not
implemented by driver.
"""
exc = NotImplementedError()
@ -4664,8 +4660,7 @@ class ComputeTestCase(BaseTestCase):
def _test_finish_revert_resize(self, power_on,
remove_old_vm_state=False):
"""
Convenience method that does most of the work for the
"""Convenience method that does most of the work for the
test_finish_revert_resize tests.
:param power_on -- True if testing resize from ACTIVE state, False if
testing resize from STOPPED state.
@ -9731,8 +9726,7 @@ class ComputePolicyTestCase(BaseTestCase):
class DisabledInstanceTypesTestCase(BaseTestCase):
"""
Some instance-types are marked 'disabled' which means that they will not
"""Some instance-types are marked 'disabled' which means that they will not
show up in customer-facing listings. We do, however, want those
instance-types to be available for emergency migrations and for rebuilding
of existing instances.

View File

@ -6386,9 +6386,7 @@ class ArchiveTestCase(test.TestCase):
self.uuid_tablenames_to_cleanup.add(tablename)
def _test_archive_deleted_rows_for_one_uuid_table(self, tablename):
"""
:returns: 0 on success, 1 if no uuid column, 2 if insert failed
"""
""":returns: 0 on success, 1 if no uuid column, 2 if insert failed."""
main_table = db_utils.get_table(self.engine, tablename)
if not hasattr(main_table.c, "uuid"):
# Not a uuid table, so skip it.

View File

@ -64,8 +64,7 @@ LOG = logging.getLogger(__name__)
def _get_connect_string(backend, user, passwd, database):
"""
Try to get a connection with a very specific set of values, if we get
"""Try to get a connection with a very specific set of values, if we get
these then we'll run the tests, otherwise they are skipped
"""
if backend == "postgres":
@ -154,8 +153,7 @@ class CommonTestsMixIn(object):
self._test_mysql_opportunistically()
def test_mysql_connect_fail(self):
"""
Test that we can trigger a mysql connection failure and we fail
"""Test that we can trigger a mysql connection failure and we fail
gracefully to ensure we don't break people without mysql
"""
if _is_backend_avail('mysql', "openstack_cifail", self.PASSWD,
@ -166,8 +164,7 @@ class CommonTestsMixIn(object):
self._test_postgresql_opportunistically()
def test_postgresql_connect_fail(self):
"""
Test that we can trigger a postgres connection failure and we fail
"""Test that we can trigger a postgres connection failure and we fail
gracefully to ensure we don't break people without postgres
"""
if _is_backend_avail('postgres', "openstack_cifail", self.PASSWD,

View File

@ -88,8 +88,7 @@ class TestGlanceSerializer(test.NoDBTestCase):
class TestGlanceImageService(test.NoDBTestCase):
"""
Tests the Glance image service.
"""Tests the Glance image service.
At a high level, the translations involved are:
@ -191,8 +190,7 @@ class TestGlanceImageService(test.NoDBTestCase):
self.assertThat(image_metas[0], matchers.DictMatches(expected))
def test_create_without_instance_id(self):
"""
Ensure we can create an image without having to specify an
"""Ensure we can create an image without having to specify an
instance_id. Public images are an example of an image not tied to an
instance.
"""

View File

@ -1690,8 +1690,7 @@ class ServicesJsonTest(ApiSampleTestBaseV2):
self._verify_response('service-disable-put-resp', subs, response, 200)
def test_service_detail(self):
"""
Return a list of all running services with the disable reason
"""Return a list of all running services with the disable reason
information if that exists.
"""
self.stubs.Set(extensions.ExtensionManager, "is_loaded",
@ -1725,8 +1724,7 @@ class ServicesXmlTest(ServicesJsonTest):
class ExtendedServicesJsonTest(ApiSampleTestBaseV2):
"""
This extension is extending the functionalities of the
"""This extension is extending the functionalities of the
Services extension so the funcionalities introduced by this extension
are tested in the ServicesJsonTest and ServicesXmlTest classes.
"""
@ -1758,8 +1756,7 @@ class ExtendedServicesDeleteJsonTest(ApiSampleTestBaseV2):
timeutils.clear_time_override()
def test_service_detail(self, *mocks):
"""
Return a list of all running services with the disable reason
"""Return a list of all running services with the disable reason
information if that exists.
"""
response = self._do_get('os-services')

View File

@ -316,8 +316,7 @@ class XMLExpectedChild(XMLMismatch):
class XMLMatchState(object):
"""
Maintain some state for matching.
"""Maintain some state for matching.
Tracks the XML node path and saves the expected and actual full
XML text, for use by the XMLMismatch subclasses.
@ -339,8 +338,7 @@ class XMLMatchState(object):
return '/' + '/'.join(self.path)
def node(self, tag, idx):
"""
Adds tag and index to the path; they will be popped off when
"""Adds tag and index to the path; they will be popped off when
the corresponding 'with' statement exits.
:param tag: The element tag

View File

@ -216,8 +216,7 @@ class InstanceTypeTestCase(test.TestCase):
self.assertEqual(inst_type_name, deleted_inst_type["name"])
def test_read_deleted_false_converting_flavorid(self):
"""
Ensure deleted flavors are not returned when not needed (for
"""Ensure deleted flavors are not returned when not needed (for
example when creating a server and attempting to translate from
flavorid to instance_type_id.
"""

View File

@ -6209,9 +6209,7 @@ class LibvirtConnTestCase(test.TestCase):
self.assertTrue(conn._is_storage_shared_with('foo', '/path'))
def test_create_domain_define_xml_fails(self):
"""
Tests that the xml is logged when defining the domain fails.
"""
"""Tests that the xml is logged when defining the domain fails."""
fake_xml = "<test>this is a test</test>"
def fake_defineXML(xml):
@ -6234,8 +6232,8 @@ class LibvirtConnTestCase(test.TestCase):
self.assertTrue(self.log_error_called)
def test_create_domain_with_flags_fails(self):
"""
Tests that the xml is logged when creating the domain with flags fails.
"""Tests that the xml is logged when creating the domain with flags
fails
"""
fake_xml = "<test>this is a test</test>"
fake_domain = FakeVirtDomain(fake_xml)
@ -6261,9 +6259,8 @@ class LibvirtConnTestCase(test.TestCase):
self.assertTrue(self.log_error_called)
def test_create_domain_enable_hairpin_fails(self):
"""
Tests that the xml is logged when enabling hairpin mode for the domain
fails.
"""Tests that the xml is logged when enabling hairpin mode for the
domain fails.
"""
utils.reset_is_neutron()
fake_xml = "<test>this is a test</test>"
@ -6372,8 +6369,7 @@ class LibvirtConnTestCase(test.TestCase):
conn.get_spice_console, self.context, instance)
def _test_attach_detach_interface_get_config(self, method_name):
"""
Tests that the get_config() method is properly called in
"""Tests that the get_config() method is properly called in
attach_interface() and detach_interface().
method_name: either \"attach_interface\" or \"detach_interface\"
@ -6416,15 +6412,13 @@ class LibvirtConnTestCase(test.TestCase):
raise ValueError("Unhandled method %" % method_name)
def test_attach_interface_get_config(self):
"""
Tests that the get_config() method is properly called in
"""Tests that the get_config() method is properly called in
attach_interface().
"""
self._test_attach_detach_interface_get_config("attach_interface")
def test_detach_interface_get_config(self):
"""
Tests that the get_config() method is properly called in
"""Tests that the get_config() method is properly called in
detach_interface().
"""
self._test_attach_detach_interface_get_config("detach_interface")

View File

@ -389,8 +389,7 @@ class VMwareAPIVMTestCase(test.NoDBTestCase):
self.assertIsNotNone(vm_util.vm_ref_cache_get(self.uuid))
def _check_vm_record(self, num_instances=1):
"""
Check if the spawned VM's properties correspond to the instance in
"""Check if the spawned VM's properties correspond to the instance in
the db.
"""
instances = self.conn.list_instances()
@ -436,8 +435,7 @@ class VMwareAPIVMTestCase(test.NoDBTestCase):
self.assertTrue(found_iface_id)
def _check_vm_info(self, info, pwr_state=power_state.RUNNING):
"""
Check if the get_info returned values correspond to the instance
"""Check if the get_info returned values correspond to the instance
object in the db.
"""
mem_kib = long(self.type_data['memory_mb']) << 10
@ -1129,9 +1127,7 @@ class VMwareAPIVMTestCase(test.NoDBTestCase):
None, None)
def _test_finish_migration(self, power_on, resize_instance=False):
"""
Tests the finish_migration method on vmops
"""
"""Tests the finish_migration method on vmops."""
self.power_on_called = False
@ -1178,9 +1174,7 @@ class VMwareAPIVMTestCase(test.NoDBTestCase):
self.instance, None)
def _test_finish_revert_migration(self, power_on):
"""
Tests the finish_revert_migration method on vmops
"""
"""Tests the finish_revert_migration method on vmops."""
# setup the test instance in the database
self._create_vm()

View File

@ -165,8 +165,7 @@ def get_fake_device_info():
def stub_vm_utils_with_vdi_attached_here(function):
"""
vm_utils.with_vdi_attached_here needs to be stubbed out because it
"""vm_utils.with_vdi_attached_here needs to be stubbed out because it
calls down to the filesystem to attach a vdi. This provides a
decorator to handle that.
"""

View File

@ -458,8 +458,7 @@ def check_isinstance(obj, cls):
def parse_server_string(server_str):
"""
Parses the given server_string and returns a list of host and port.
"""Parses the given server_string and returns a list of host and port.
If it's not a combination of host part and port, the port element
is a null string. If the input is invalid expression, return a null
list.
@ -989,8 +988,7 @@ def spawn_n(func, *args, **kwargs):
def is_none_string(val):
"""
Check if a string represents a None value.
"""Check if a string represents a None value.
"""
if not isinstance(val, six.string_types):
return False

View File

@ -81,8 +81,7 @@ def get_partition_sizes(instance):
def get_tftp_image_info(instance):
"""
Generate the paths for tftp files for this instance.
"""Generate the paths for tftp files for this instance.
Raises NovaException if
- instance does not contain kernel_id
@ -297,8 +296,7 @@ class Tilera(base.NodeDriver):
os.path.join(CONF.baremetal.tftp_root, instance['uuid']))
def _iptables_set(self, node_ip, user_data):
"""
Sets security setting (iptables:port) if needed.
"""Sets security setting (iptables:port) if needed.
iptables -A INPUT -p tcp ! -s $IP --dport $PORT -j DROP
/tftpboot/iptables_rule script sets iptables rule on the given node.

View File

@ -93,8 +93,7 @@ class Pdu(base.PowerManager):
"to PDU"))
def _exec_pdutool(self, mode):
"""
Changes power state of the given node.
"""Changes power state of the given node.
According to the mode (1-ON, 2-OFF, 3-REBOOT), power state can be
changed. /tftpboot/pdu_mgr script handles power management of

View File

@ -289,13 +289,9 @@ class LibvirtVolumeDriver(VolumeDriver):
instance=instance)
def get_all_block_devices(self):
"""
Return all block devices in use on this node.
"""
"""Return all block devices in use on this node."""
return _list_backingstore_path()
def get_hypervisor_version(self):
"""
A dummy method for LibvirtBaseVolumeDriver.connect_volume.
"""
"""A dummy method for LibvirtBaseVolumeDriver.connect_volume."""
return 1

View File

@ -123,8 +123,7 @@ class DriverBlockDevice(dict):
return dict((key, self.get(key)) for key in self._legacy_fields)
def attach(self, **kwargs):
"""
Make the device available to be used by VMs.
"""Make the device available to be used by VMs.
To be overriden in subclasses with the connecting logic for
the type of device the subclass represents.

View File

@ -33,8 +33,7 @@ CONF.register_opts(virt_cpu_opts)
def get_cpuset_ids():
"""
Parsing vcpu_pin_set config.
"""Parsing vcpu_pin_set config.
Returns a list of pcpu ids can be used by instances.
"""

View File

@ -28,8 +28,7 @@ guestfs = None
class VFSGuestFS(vfs.VFS):
"""
This class implements a VFS module that uses the libguestfs APIs
"""This class implements a VFS module that uses the libguestfs APIs
to access the disk image. The disk image is never mapped into
the host filesystem, thus avoiding any potential for symlink
attacks from the guest filesystem.

Some files were not shown because too many files have changed in this diff Show More