]> review.fuel-infra Code Review - openstack-build/cinder-build.git/commitdiff
Fix all occurences of H404 Hacking warning
authorDirk Mueller <dirk@dmllr.de>
Sat, 29 Jun 2013 11:38:13 +0000 (13:38 +0200)
committerAvishay Traeger <avishay@il.ibm.com>
Sun, 13 Oct 2013 07:36:27 +0000 (10:36 +0300)
This fixes all triggers of hacking 0.6.x's warning:
H404 - multi line docstring should start with a summary.
and enables gating check on H404.

Change-Id: I034bd1f05da3f279d8d79aa14a7f6ce8bef5047c

40 files changed:
cinder/api/contrib/admin_actions.py
cinder/api/contrib/services.py
cinder/api/middleware/sizelimit.py
cinder/api/openstack/__init__.py
cinder/api/openstack/wsgi.py
cinder/api/v1/limits.py
cinder/api/v1/router.py
cinder/api/v2/limits.py
cinder/api/v2/router.py
cinder/api/views/versions.py
cinder/api/xmlutil.py
cinder/backup/api.py
cinder/brick/remotefs/remotefs.py
cinder/context.py
cinder/db/api.py
cinder/db/sqlalchemy/api.py
cinder/keymgr/conf_key_mgr.py
cinder/keymgr/key.py
cinder/quota.py
cinder/scheduler/scheduler_options.py
cinder/tests/api/test_common.py
cinder/tests/api/v1/test_limits.py
cinder/tests/api/v1/test_snapshots.py
cinder/tests/api/v1/test_volumes.py
cinder/tests/api/v2/test_limits.py
cinder/tests/keymgr/mock_key_mgr.py
cinder/tests/scheduler/test_filter_scheduler.py
cinder/tests/scheduler/test_host_filters.py
cinder/tests/test_backup.py
cinder/tests/test_migrations.py
cinder/tests/test_netapp_nfs.py
cinder/tests/test_xiv_ds8k.py
cinder/transfer/api.py
cinder/utils.py
cinder/volume/drivers/nexenta/nfs.py
cinder/volume/drivers/san/hp/hp_3par_fc.py
cinder/volume/drivers/san/hp/hp_3par_iscsi.py
cinder/volume/drivers/zadara.py
tools/colorizer.py
tox.ini

index b75a92c50ce57b1c9e985f35b12dd41e7d40ee24..6ccae0a1efee0e1cff27cc39e13f09c59516a2e6 100644 (file)
@@ -126,10 +126,7 @@ class VolumeAdminController(AdminController):
 
     @wsgi.action('os-force_detach')
     def _force_detach(self, req, id, body):
-        """
-        Roll back a bad detach after the volume been disconnected from
-        the hypervisor.
-        """
+        """Roll back a bad detach after the volume been disconnected."""
         context = req.environ['cinder.context']
         self.authorize(context, 'force_detach')
         try:
index bb4c0e37792f5e7a2c1e48ef70bbbd811e95ab3b..a72ae30475eb672494bfd5d3b0ed249119e1724e 100644 (file)
@@ -68,8 +68,9 @@ class ServicesUpdateTemplate(xmlutil.TemplateBuilder):
 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.
+
+        Filter by host & service name.
         """
         context = req.environ['cinder.context']
         authorize(context)
index af7b742947134e44db9caa4e3a6c21e58fa56536..5a39549654f121dfdf50a75f5bec797501cef5c7 100644 (file)
@@ -41,7 +41,8 @@ LOG = logging.getLogger(__name__)
 class LimitingReader(object):
     """Reader to limit the size of an incoming request."""
     def __init__(self, data, limit):
-        """
+        """Initialize LimitingReader.
+
         :param data: Underlying data object
         :param limit: maximum number of bytes the reader should allow
         """
index 30c35834510434582cb0b7f18d5289a672cf599a..df48d95075c2236360ec869cc8d6a76c8526f088 100644 (file)
@@ -54,10 +54,7 @@ class ProjectMapper(APIMapper):
 
 
 class APIRouter(base_wsgi.Router):
-    """
-    Routes requests on the OpenStack API to the appropriate controller
-    and method.
-    """
+    """Routes requests on the API to the appropriate controller and method."""
     ExtensionManager = None  # override in subclasses
 
     @classmethod
index 99ba8e4909451d2c07142f5e3d4bdea06a4f91cc..5b54cceefb9c4893e961e3ffdf2ba631668092b2 100644 (file)
@@ -154,7 +154,8 @@ class JSONDeserializer(TextDeserializer):
 class XMLDeserializer(TextDeserializer):
 
     def __init__(self, metadata=None):
-        """
+        """Initialize XMLDeserializer.
+
         :param metadata: information needed to deserialize xml into
                          a dictionary.
         """
@@ -269,7 +270,8 @@ class JSONDictSerializer(DictSerializer):
 class XMLDictSerializer(DictSerializer):
 
     def __init__(self, metadata=None, xmlns=None):
-        """
+        """Initialize XMLDictSerializer.
+
         :param metadata: information needed to deserialize xml into
                          a dictionary.
         :param xmlns: XML namespace to include with serialized xml
@@ -631,7 +633,8 @@ class Resource(wsgi.Application):
     """
 
     def __init__(self, controller, action_peek=None, **deserializers):
-        """
+        """Initialize 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
@@ -1122,14 +1125,10 @@ def _set_request_id_header(req, headers):
 
 
 class OverLimitFault(webob.exc.HTTPException):
-    """
-    Rate-limited request response.
-    """
+    """Rate-limited request response."""
 
     def __init__(self, message, details, retry_time):
-        """
-        Initialize new `OverLimitFault` with relevant information.
-        """
+        """Initialize new `OverLimitFault` with relevant information."""
         hdrs = OverLimitFault._retry_after(retry_time)
         self.wrapped_exc = webob.exc.HTTPRequestEntityTooLarge(headers=hdrs)
         self.content = {
index faab7817298d9cea4900795aeea3ed0011eb6ec5..a0a89078a2db232698123d5253a61a388e055b7f 100644 (file)
@@ -75,15 +75,11 @@ class LimitsTemplate(xmlutil.TemplateBuilder):
 
 
 class LimitsController(object):
-    """
-    Controller for accessing limits in the OpenStack API.
-    """
+    """Controller for accessing limits in the OpenStack API."""
 
     @wsgi.serializers(xml=LimitsTemplate)
     def index(self, req):
-        """
-        Return all global and rate limit information.
-        """
+        """Return all global and rate limit information."""
         context = req.environ['cinder.context']
         quotas = QUOTAS.get_project_quotas(context, context.project_id,
                                            usages=False)
@@ -102,9 +98,7 @@ def create_resource():
 
 
 class Limit(object):
-    """
-    Stores information about a limit for HTTP requests.
-    """
+    """Stores information about a limit for HTTP requests."""
 
     UNITS = {
         1: "SECOND",
@@ -116,8 +110,7 @@ class Limit(object):
     UNIT_MAP = dict([(v, k) for k, v in 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
@@ -147,8 +140,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.
+        """Represent a call to this limit from a relevant request.
 
         @param verb: string http verb (POST, GET, etc.)
         @param url: string URL
@@ -216,15 +208,15 @@ 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`
+
+        This  wraps the given WSGI application and sets up the given limits.
 
         @param application: WSGI application to wrap
         @param limits: String describing limits
@@ -248,10 +240,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.
+        """Represent 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.
@@ -278,13 +270,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
         """
@@ -298,14 +287,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)
         """
@@ -329,9 +315,9 @@ class Limiter(object):
     # default limit parsing.
     @staticmethod
     def parse_limits(limits):
-        """
-        Convert a string into a list of Limit instances.  This
-        implementation expects a semicolon-separated sequence of
+        """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,
         user-readable URI, a URI reg-exp, an integer number of
@@ -384,8 +370,9 @@ 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::
 
@@ -400,8 +387,7 @@ class WsgiLimiter(object):
     """
 
     def __init__(self, limits=None):
-        """
-        Initialize the new `WsgiLimiter`.
+        """Initialize the new `WsgiLimiter`.
 
         @param limits: List of `Limit` objects
         """
@@ -409,10 +395,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()
@@ -436,13 +423,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
         """
@@ -473,9 +457,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
-        proxy.
+        """Ignore a limits string--simply doesn't apply for the limit proxy.
 
         @return: Empty list.
         """
index f5c3fb7cc9fa8d68e703d05b8a4ef707712af2f5..37595725c2a5c3355d32a6f990d81206caa77b31 100644 (file)
@@ -37,10 +37,7 @@ LOG = logging.getLogger(__name__)
 
 
 class APIRouter(cinder.api.openstack.APIRouter):
-    """
-    Routes requests on the OpenStack API to the appropriate controller
-    and method.
-    """
+    """Routes requests on the API to the appropriate controller and method."""
     ExtensionManager = extensions.ExtensionManager
 
     def _setup_routes(self, mapper, ext_mgr):
index faab7817298d9cea4900795aeea3ed0011eb6ec5..face1038dbc61ffd1aeb5a838397b5299a3c6fd5 100644 (file)
@@ -75,15 +75,11 @@ class LimitsTemplate(xmlutil.TemplateBuilder):
 
 
 class LimitsController(object):
-    """
-    Controller for accessing limits in the OpenStack API.
-    """
+    """Controller for accessing limits in the OpenStack API."""
 
     @wsgi.serializers(xml=LimitsTemplate)
     def index(self, req):
-        """
-        Return all global and rate limit information.
-        """
+        """Return all global and rate limit information."""
         context = req.environ['cinder.context']
         quotas = QUOTAS.get_project_quotas(context, context.project_id,
                                            usages=False)
@@ -102,9 +98,7 @@ def create_resource():
 
 
 class Limit(object):
-    """
-    Stores information about a limit for HTTP requests.
-    """
+    """Stores information about a limit for HTTP requests."""
 
     UNITS = {
         1: "SECOND",
@@ -116,8 +110,7 @@ class Limit(object):
     UNIT_MAP = dict([(v, k) for k, v in 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
@@ -147,8 +140,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.
+        """Represent a call to this limit from a relevant request.
 
         @param verb: string http verb (POST, GET, etc.)
         @param url: string URL
@@ -216,14 +208,13 @@ 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
+        """Initialize new `RateLimitingMiddleware`, which wraps the given WSGI
         application and sets up the given limits.
 
         @param application: WSGI application to wrap
@@ -248,13 +239,12 @@ 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.
 
-        If the request should be rate limited, return a fault telling the user
-        they are over the limit and need to retry later.
+        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.
         """
         verb = req.method
         url = req.url
@@ -278,13 +268,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
         """
@@ -298,14 +285,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)
         """
@@ -329,9 +313,9 @@ class Limiter(object):
     # default limit parsing.
     @staticmethod
     def parse_limits(limits):
-        """
-        Convert a string into a list of Limit instances.  This
-        implementation expects a semicolon-separated sequence of
+        """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,
         user-readable URI, a URI reg-exp, an integer number of
@@ -384,8 +368,9 @@ 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::
 
@@ -400,8 +385,7 @@ class WsgiLimiter(object):
     """
 
     def __init__(self, limits=None):
-        """
-        Initialize the new `WsgiLimiter`.
+        """Initialize the new `WsgiLimiter`.
 
         @param limits: List of `Limit` objects
         """
@@ -409,10 +393,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()
@@ -436,13 +421,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
         """
@@ -473,9 +455,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
-        proxy.
+        """Ignore a limits string--simply doesn't apply for the limit proxy.
 
         @return: Empty list.
         """
index 1f28ca577ad06d0f7e56f00ede69e73d952e15d0..94649bbc1d7e54e770d72ded0b2f51fdae96df9f 100644 (file)
@@ -37,10 +37,7 @@ LOG = logging.getLogger(__name__)
 
 
 class APIRouter(cinder.api.openstack.APIRouter):
-    """
-    Routes requests on the OpenStack API to the appropriate controller
-    and method.
-    """
+    """Routes requests on the API to the appropriate controller and method."""
     ExtensionManager = extensions.ExtensionManager
 
     def _setup_routes(self, mapper, ext_mgr):
index a7a88ca39104293e43ac4e65701abb944f8c3da9..f7881a8a642985920b0236c38d7730dabf1010d8 100644 (file)
@@ -26,7 +26,8 @@ def get_view_builder(req):
 
 class ViewBuilder(object):
     def __init__(self, base_url):
-        """
+        """Initialize ViewBuilder.
+
         :param base_url: url of the root wsgi application
         """
         self.base_url = base_url
index 8edb0ca957ce4b3d17a793aacfffe69a339fa28e..4b78270a9b3e000f381a74f3ff149385759fee7b 100644 (file)
@@ -910,9 +910,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)
@@ -925,14 +923,17 @@ def make_links(parent, selector=None):
 
 
 def make_flat_dict(name, selector=None, subselector=None, ns=None):
-    """
-    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
-    text derived from the object's values.  This only works for flat
-    dictionary objects, not dictionaries containing nested lists or
-    dictionaries.
+    """Utility for simple XML templates.
+
+    Simple templates are 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 text derived from the object's values.
+
+    This only works for flat dictionary objects, not dictionaries
+    containing nested lists or dictionaries.
     """
 
     # Set up the names we need...
index dbb3a91cd6b0b62dbf2b5eedefad02aa3ee05309..2c2d501153285ce7666a2f4e9a8ff93655bc4fb0 100644 (file)
@@ -85,7 +85,7 @@ class API(base.Base):
         return backups
 
     def _is_backup_service_enabled(self, volume, volume_host):
-        """Check if there is an backup service available"""
+        """Check if there is a backup service available."""
         topic = CONF.backup_topic
         ctxt = context.get_admin_context()
         services = self.db.service_get_all_by_topic(ctxt, topic)
index e0fbd2bca5043ef45c2e66896bc0bc8725f7597c..4ac0a3d4a5c9fe783baed3d00717a7799b10bc9a 100644 (file)
@@ -61,7 +61,8 @@ class RemoteFsClient(object):
         return hashlib.md5(base_str).hexdigest()
 
     def get_mount_point(self, device_name):
-        """
+        """Get Mount Point.
+
         :param device_name: example 172.18.194.100:/var/nfs
         """
         return os.path.join(self._mount_base,
index 63ad85c8d6c00e661eefe206cbce4d559b4592fa..05b5396f7aef602606b7d7390b29b48668cf739c 100644 (file)
@@ -47,7 +47,8 @@ class RequestContext(object):
                  timestamp=None, request_id=None, auth_token=None,
                  overwrite=True, quota_class=None, service_catalog=None,
                  **kwargs):
-        """
+        """Initialize RequestContext.
+
         :param read_deleted: 'no' indicates deleted records are hidden, 'yes'
             indicates deleted records are visible, 'only' indicates that
             *only* deleted records are visible.
index e8aef4021892d7a19e407a8f1a92b6c427e23484..0648ead86a51eaf89809d82bab98dcf5120b9294 100644 (file)
@@ -560,20 +560,21 @@ def volume_snapshot_glance_metadata_get(context, snapshot_id):
 
 
 def volume_glance_metadata_copy_to_snapshot(context, snapshot_id, volume_id):
-    """
-    Update the Glance metadata for a snapshot by copying all of the key:value
-    pairs from the originating volume. This is so that a volume created from
-    the snapshot will retain the original metadata.
+    """Update the Glance metadata for a snapshot.
+
+    This will copy all of the key:value pairs from the originating volume,
+    to ensure that a volume created from the snapshot will retain the
+    original metadata.
     """
     return IMPL.volume_glance_metadata_copy_to_snapshot(context, snapshot_id,
                                                         volume_id)
 
 
 def volume_glance_metadata_copy_to_volume(context, volume_id, snapshot_id):
-    """
-    Update the Glance metadata from a volume (created from a snapshot) by
-    copying all of the key:value pairs from the originating snapshot. This is
-    so that the Glance metadata from the original volume is retained.
+    """Update the Glance metadata from a volume (created from a snapshot).
+
+    This will copy all of the key:value pairs from the originating snapshot,
+    to ensure that the Glance metadata from the original volume is retained.
     """
     return IMPL.volume_glance_metadata_copy_to_volume(context, volume_id,
                                                       snapshot_id)
@@ -592,10 +593,11 @@ def volume_glance_metadata_delete_by_snapshot(context, snapshot_id):
 def volume_glance_metadata_copy_from_volume_to_volume(context,
                                                       src_volume_id,
                                                       volume_id):
-    """
-    Update the Glance metadata for a volume by copying all of the key:value
-    pairs from the originating volume. This is so that a volume created from
-    the volume (clone) will retain the original metadata.
+    """Update the Glance metadata for a volume by copying all of the key:value
+    pairs from the originating volume.
+
+    This is so that a volume created from the volume (clone) will retain the
+    original metadata.
     """
     return IMPL.volume_glance_metadata_copy_from_volume_to_volume(
         context,
@@ -768,8 +770,7 @@ def backup_get_all_by_project(context, project_id):
 
 
 def backup_update(context, backup_id, values):
-    """
-    Set the given properties on a backup and update it.
+    """Set the given properties on a backup and update it.
 
     Raises NotFound if backup does not exist.
     """
index 405c6fed5f4c5338a16cbc1be9d1515e022dda7f..e872bce3373dcda311b5338231af750a4f2633cb 100644 (file)
@@ -1681,9 +1681,7 @@ def volume_type_create(context, values):
 
 @require_context
 def volume_type_get_all(context, inactive=False, filters=None):
-    """
-    Returns a dict describing all volume_types with name as key.
-    """
+    """Returns a dict describing all volume_types with name as key."""
     filters = filters or {}
 
     read_deleted = "yes" if inactive else "no"
@@ -2338,8 +2336,8 @@ def volume_snapshot_glance_metadata_get(context, snapshot_id):
 @require_context
 @require_volume_exists
 def volume_glance_metadata_create(context, volume_id, key, value):
-    """
-    Update the Glance metadata for a volume by adding a new key:value pair.
+    """Update the Glance metadata for a volume by adding a new key:value pair.
+
     This API does not support changing the value of a key once it has been
     created.
     """
@@ -2368,10 +2366,11 @@ def volume_glance_metadata_create(context, volume_id, key, value):
 @require_context
 @require_snapshot_exists
 def volume_glance_metadata_copy_to_snapshot(context, snapshot_id, volume_id):
-    """
-    Update the Glance metadata for a snapshot by copying all of the key:value
-    pairs from the originating volume. This is so that a volume created from
-    the snapshot will retain the original metadata.
+    """Update the Glance metadata for a snapshot.
+
+    This copies all of the key:value pairs from the originating volume, to
+    ensure that a volume created from the snapshot will retain the
+    original metadata.
     """
 
     session = get_session()
@@ -2392,10 +2391,11 @@ def volume_glance_metadata_copy_to_snapshot(context, snapshot_id, volume_id):
 def volume_glance_metadata_copy_from_volume_to_volume(context,
                                                       src_volume_id,
                                                       volume_id):
-    """
-    Update the Glance metadata for a volume by copying all of the key:value
-    pairs from the originating volume. This is so that a volume created from
-    the volume (clone) will retain the original metadata.
+    """Update the Glance metadata for a volume.
+
+    This copies all all of the key:value pairs from the originating volume,
+    to ensure that a volume created from the volume (clone) will
+    retain the original metadata.
     """
 
     session = get_session()
@@ -2415,10 +2415,10 @@ def volume_glance_metadata_copy_from_volume_to_volume(context,
 @require_context
 @require_volume_exists
 def volume_glance_metadata_copy_to_volume(context, volume_id, snapshot_id):
-    """
-    Update the Glance metadata from a volume (created from a snapshot) by
-    copying all of the key:value pairs from the originating snapshot. This is
-    so that the Glance metadata from the original volume is retained.
+    """Update the Glance metadata from a volume (created from a snapshot) by
+    copying all of the key:value pairs from the originating snapshot.
+
+    This is so that the Glance metadata from the original volume is retained.
     """
 
     session = get_session()
index 1c9ff2d64262d9cd70cc191bfb0bde7a7dda644f..f000c441b88106642073551104a49e32534ebd39 100644 (file)
@@ -56,7 +56,8 @@ LOG = logging.getLogger(__name__)
 
 
 class ConfKeyManager(key_mgr.KeyManager):
-    """
+    """Key Manager that supports one key defined by the fixed_key conf option.
+
     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)
index 644cf34c4d52079e9324a76ed6047108a2c143ad..e0a3f415f47192b66a8c739b920c1818b0f9e6e1 100644 (file)
@@ -55,9 +55,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.
index 30589a6c346980936a10532e503a5b01cc4ac9a3..b055705e7bfb96c2c34806437c5e1d89aac8a1fd 100644 (file)
@@ -65,10 +65,11 @@ CONF.register_opts(quota_opts)
 
 
 class DbQuotaDriver(object):
-    """
-    Driver to perform necessary checks to enforce quotas and obtain
-    quota information.  The default driver utilizes the local
-    database.
+
+    """Driver to perform check to enforcement of quotas.
+
+    Also allows to obtain quota information.
+    The default driver utilizes the local database.
     """
 
     def get_by_project(self, context, project_id, resource_name):
@@ -115,9 +116,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
-        quota class.
+        """Given list of resources, retrieve the quotas for given quota class.
 
         :param context: The request context, for access checks.
         :param resources: A dictionary of the registered resources.
@@ -147,8 +146,7 @@ class DbQuotaDriver(object):
     def get_project_quotas(self, context, resources, project_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
         project.
 
         :param context: The request context, for access checks.
@@ -210,10 +208,10 @@ class DbQuotaDriver(object):
         return quotas
 
     def _get_quotas(self, context, resources, keys, has_sync, project_id=None):
-        """
-        A helper method which retrieves the quotas for the specific
-        resources identified by keys, and which apply to the current
-        context.
+        """A helper method which retrieves the quotas for specific resources.
+
+        This specific resource is identified by keys, and which apply to the
+        current context.
 
         :param context: The request context, for access checks.
         :param resources: A dictionary of the registered resources.
@@ -392,9 +390,9 @@ class DbQuotaDriver(object):
         db.reservation_rollback(context, reservations, project_id=project_id)
 
     def destroy_all_by_project(self, context, project_id):
-        """
-        Destroy all quotas, usages, and reservations associated with a
-        project.
+        """Destroy all that is associated with a project.
+
+        This includes quotas, usages and reservations.
 
         :param context: The request context, for access checks.
         :param project_id: The ID of the project being deleted.
@@ -418,8 +416,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., "volumes".
         :param flag: The name of the flag or configuration option
@@ -431,9 +428,7 @@ class BaseResource(object):
         self.flag = flag
 
     def quota(self, driver, context, **kwargs):
-        """
-        Given a driver and context, obtain the quota for this
-        resource.
+        """Given a driver and context, obtain the quota for this resource.
 
         :param driver: A quota driver.
         :param context: The request context.
@@ -526,10 +521,7 @@ class AbsoluteResource(BaseResource):
 
 
 class CountableResource(AbsoluteResource):
-    """
-    Describe a resource where the counts aren't based solely on the
-    project ID.
-    """
+    """Describe a resource where counts aren't based only on the project ID."""
 
     def __init__(self, name, count, flag=None):
         """Initializes a CountableResource.
@@ -568,8 +560,7 @@ class VolumeTypeResource(ReservableResource):
     """ReservableResource for a specific volume type."""
 
     def __init__(self, part_name, volume_type):
-        """
-        Initializes a VolumeTypeResource.
+        """Initializes a VolumeTypeResource.
 
         :param part_name: The kind of resource, i.e., "volumes".
         :param volume_type: The volume type for this resource.
@@ -802,8 +793,7 @@ class QuotaEngine(object):
                             "%s") % reservations)
 
     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.
index bed93abd6ebe96944560e0cbedd45aba0c766991..9cf9785686fff15cad69542d7f6be909a8d7aeb2 100644 (file)
@@ -45,11 +45,11 @@ LOG = logging.getLogger(__name__)
 
 
 class SchedulerOptions(object):
-    """
-    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.
+    """SchedulerOptions monitors a local .json file for changes.
+
+    The file is reloaded if needed and converted to a data structure and
+    passed into the filtering and weighing functions which can use it
+    for dynamic configuration.
     """
 
     def __init__(self):
index b66b8e908c7853eb8f81118025eebead6ec34e21..214a50a6afbe9680eb4d6b78b9ef17b45366c793 100644 (file)
@@ -31,10 +31,11 @@ ATOMNS = "{http://www.w3.org/2005/Atom}"
 
 
 class LimiterTest(test.TestCase):
-    """
-    Unit tests for the `cinder.api.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 `cinder.api.common.limited` method.
+
+    This method 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):
@@ -161,9 +162,9 @@ class LimiterTest(test.TestCase):
 
 
 class PaginationParamsTest(test.TestCase):
-    """
-    Unit tests for the `cinder.api.common.get_pagination_params`
-    method which takes in a request object and returns 'marker' and 'limit'
+    """Unit tests for `cinder.api.common.get_pagination_params` method.
+
+    This method takes in a request object and returns 'marker' and 'limit'
     GET params.
     """
 
index e0f429af42162f11b7c205bbf554f5def056a43f..b0ec310892555b889c83de1a437fffb5d1302f51 100644 (file)
@@ -67,9 +67,7 @@ class BaseLimitTestSuite(test.TestCase):
 
 
 class LimitsControllerTest(BaseLimitTestSuite):
-    """
-    Tests for `limits.LimitsController` class.
-    """
+    """Tests for `limits.LimitsController` class."""
 
     def setUp(self):
         """Run before each test."""
@@ -233,9 +231,7 @@ class TestLimiter(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):
@@ -301,9 +297,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."""
@@ -333,10 +327,7 @@ class LimitTest(BaseLimitTestSuite):
 
 
 class ParseLimitsTest(BaseLimitTestSuite):
-    """
-    Tests for the default limits parser in the in-memory
-    `limits.Limiter` class.
-    """
+    """Tests for the default limits parser in the `limits.Limiter` class."""
 
     def test_invalid(self):
         """Test that parse_limits() handles invalid input correctly."""
@@ -399,9 +390,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."""
@@ -422,23 +411,19 @@ 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
-        didn"t set.
-        """
+        """no delay on a single call for a limit verb we didn"t set."""
         delay = self.limiter.check_for_delay("GET", "/anything")
         self.assertEqual(delay, (None, None))
 
     def test_no_delay_PUT(self):
-        """
-        Simple test to ensure no delay on a single call for a known limit.
-        """
+        """no delay on a single call for a known limit."""
         delay = self.limiter.check_for_delay("PUT", "/anything")
         self.assertEqual(delay, (None, None))
 
     def test_delay_PUT(self):
-        """
-        Ensure the 11th PUT will result in a delay of 6.0 seconds until
+        """test delay on 11th put request.
+
+        the 11th PUT will result in a delay of 6.0 seconds until
         the next request will be granced.
         """
         expected = [None] * 10 + [6.0]
@@ -447,9 +432,10 @@ 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
-        the next request will be granced.
+        """test delay of 8th post request.
+
+        Ensure that the 8th POST will result in a delay of 6.0 seconds
+        until the next request will be granced.
         """
         expected = [None] * 7
         results = list(self._check(7, "POST", "/anything"))
@@ -460,9 +446,7 @@ class LimiterTest(BaseLimitTestSuite):
         self.failUnlessAlmostEqual(expected, results, 8)
 
     def test_delay_GET(self):
-        """
-        Ensure the 11th GET will result in NO delay.
-        """
+        """Ensure the 11th GET will result in NO delay."""
         expected = [None] * 11
         results = list(self._check(11, "GET", "/anything"))
         self.assertEqual(expected, results)
@@ -472,10 +456,11 @@ class LimiterTest(BaseLimitTestSuite):
         self.assertEqual(expected, results)
 
     def test_delay_PUT_volumes(self):
-        """
-        Ensure PUT on /volumes limits at 5 requests, and PUT elsewhere is still
-        OK after 5 requests...but then after 11 total requests, PUT limiting
-        kicks in.
+        """Test limit of PUT on /volumes.
+
+        Ensure PUT on /volumes 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 /volumes
         expected = [None] * 5 + [12.0]
@@ -488,7 +473,8 @@ class LimiterTest(BaseLimitTestSuite):
         self.assertEqual(expected, results)
 
     def test_delay_PUT_wait(self):
-        """
+        """Test limit on PUT is lifted.
+
         Ensure after hitting the limit and then waiting for the correct
         amount of time, the limit will be lifted.
         """
@@ -504,9 +490,7 @@ class LimiterTest(BaseLimitTestSuite):
         self.assertEqual(expected, results)
 
     def test_multiple_delays(self):
-        """
-        Ensure multiple requests still get a delay.
-        """
+        """Ensure multiple requests still get a delay."""
         expected = [None] * 10 + [6.0] * 10
         results = list(self._check(20, "PUT", "/anything"))
         self.assertEqual(expected, results)
@@ -522,16 +506,12 @@ class LimiterTest(BaseLimitTestSuite):
         self.assertEqual(expected, results)
 
     def test_user_limit(self):
-        """
-        Test user-specific limits.
-        """
+        """Test user-specific limits."""
         self.assertEqual(self.limiter.levels['user3'], [])
         self.assertEqual(len(self.limiter.levels['user0']), 2)
 
     def test_multiple_users(self):
-        """
-        Tests involving multiple users.
-        """
+        """Tests involving multiple users."""
 
         # User0
         expected = [None] * 2 + [30.0] * 8
@@ -580,9 +560,7 @@ class LimiterTest(BaseLimitTestSuite):
 
 
 class WsgiLimiterTest(BaseLimitTestSuite):
-    """
-    Tests for `limits.WsgiLimiter` class.
-    """
+    """Tests for `limits.WsgiLimiter` class."""
 
     def setUp(self):
         """Run before each test."""
@@ -594,9 +572,13 @@ class WsgiLimiterTest(BaseLimitTestSuite):
         return jsonutils.dumps({"verb": verb, "path": path})
 
     def _request(self, verb, url, username=None):
-        """Make sure that POSTing to the given url causes the given username
-        to perform the given action.  Make the internal rate limiter return
-        delay and make sure that the WSGI app returns the correct response.
+        """Assert that POSTing to given url triggers given action.
+
+        Ensure POSTing to the given url causes the given username
+        to perform the given action.
+
+        Make the internal rate limiter return delay and make sure that the
+        WSGI app returns the correct response.
         """
         if username:
             request = webob.Request.blank("/%s" % username)
@@ -651,9 +633,7 @@ class WsgiLimiterTest(BaseLimitTestSuite):
 
 
 class FakeHttplibSocket(object):
-    """
-    Fake `httplib.HTTPResponse` replacement.
-    """
+    """Fake `httplib.HTTPResponse` replacement."""
 
     def __init__(self, response_string):
         """Initialize new `FakeHttplibSocket`."""
@@ -665,22 +645,19 @@ 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
-        into our WSGI app, we then wait for the response and turn it back into
-        an `httplib.HTTPResponse`.
+        """Fake method for request.
+
+        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`.
         """
         if not headers:
             headers = {}
@@ -741,12 +718,11 @@ 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):
-        """
+        """setUp for test suite.
+
         Do some nifty HTTP/WSGI magic which allows for WSGI to be called
         directly by something like the `httplib` library.
         """
index 4e7b0bd18c24d6e5ea662e46d70bb17af84bea65..831a0db1ba48a11b438f270c741a4148ac930739 100644 (file)
@@ -412,9 +412,7 @@ class SnapshotSerializerTest(test.TestCase):
 
 class SnapshotsUnprocessableEntityTestCase(test.TestCase):
 
-    """
-    Tests of places we throw 422 Unprocessable Entity from
-    """
+    """Tests of places we throw 422 Unprocessable Entity."""
 
     def setUp(self):
         super(SnapshotsUnprocessableEntityTestCase, self).setUp()
index b938f2efc376dd48c42a0bec6c52ca2f57745376..6a6d5aa1a5d290ebaef6c692addcfe88ed943b40 100644 (file)
@@ -1131,9 +1131,7 @@ class TestVolumeCreateRequestXMLDeserializer(test.TestCase):
 
 class VolumesUnprocessableEntityTestCase(test.TestCase):
 
-    """
-    Tests of places we throw 422 Unprocessable Entity from
-    """
+    """Tests of places we throw 422 Unprocessable Entity from."""
 
     def setUp(self):
         super(VolumesUnprocessableEntityTestCase, self).setUp()
index 082a7a068c811fb19263bb76642c4e5a8e3efd49..1adfb40fb9cae208e473a5ef32c01106d33df72c 100644 (file)
@@ -67,9 +67,8 @@ class BaseLimitTestSuite(test.TestCase):
 
 
 class LimitsControllerTest(BaseLimitTestSuite):
-    """
-    Tests for `limits.LimitsController` class.
-    """
+
+    """Tests for `limits.LimitsController` class."""
 
     def setUp(self):
         """Run before each test."""
@@ -233,9 +232,8 @@ class TestLimiter(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):
@@ -301,9 +299,8 @@ 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."""
@@ -333,10 +330,8 @@ class LimitTest(BaseLimitTestSuite):
 
 
 class ParseLimitsTest(BaseLimitTestSuite):
-    """
-    Tests for the default limits parser in the in-memory
-    `limits.Limiter` class.
-    """
+
+    """Tests for the default limits parser in the `limits.Limiter` class."""
 
     def test_invalid(self):
         """Test that parse_limits() handles invalid input correctly."""
@@ -399,9 +394,8 @@ 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."""
@@ -422,22 +416,18 @@ 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
-        didn"t set.
-        """
+        """Ensure no delay on a single call for a limit verb we didn't set."""
         delay = self.limiter.check_for_delay("GET", "/anything")
         self.assertEqual(delay, (None, None))
 
     def test_no_delay_PUT(self):
-        """
-        Simple test to ensure no delay on a single call for a known limit.
-        """
+        """Ensure no delay on a single call for a known limit."""
         delay = self.limiter.check_for_delay("PUT", "/anything")
         self.assertEqual(delay, (None, None))
 
     def test_delay_PUT(self):
-        """
+        """Test delay on 11th PUT request.
+
         Ensure the 11th PUT will result in a delay of 6.0 seconds until
         the next request will be granced.
         """
@@ -447,7 +437,8 @@ class LimiterTest(BaseLimitTestSuite):
         self.assertEqual(expected, results)
 
     def test_delay_POST(self):
-        """
+        """Test delay on 8th POST request.
+
         Ensure the 8th POST will result in a delay of 6.0 seconds until
         the next request will be granced.
         """
@@ -460,9 +451,7 @@ class LimiterTest(BaseLimitTestSuite):
         self.failUnlessAlmostEqual(expected, results, 8)
 
     def test_delay_GET(self):
-        """
-        Ensure the 11th GET will result in NO delay.
-        """
+        """Ensure the 11th GET will result in NO delay."""
         expected = [None] * 11
         results = list(self._check(11, "GET", "/anything"))
         self.assertEqual(expected, results)
@@ -472,10 +461,11 @@ class LimiterTest(BaseLimitTestSuite):
         self.assertEqual(expected, results)
 
     def test_delay_PUT_volumes(self):
-        """
-        Ensure PUT on /volumes limits at 5 requests, and PUT elsewhere is still
-        OK after 5 requests...but then after 11 total requests, PUT limiting
-        kicks in.
+        """Test delay on /volumes.
+
+        Ensure PUT on /volumes 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 /volumes
         expected = [None] * 5 + [12.0]
@@ -488,9 +478,10 @@ class LimiterTest(BaseLimitTestSuite):
         self.assertEqual(expected, results)
 
     def test_delay_PUT_wait(self):
-        """
-        Ensure after hitting the limit and then waiting for the correct
-        amount of time, the limit will be lifted.
+        """Test limit is lifted again.
+
+        Ensure after hitting the limit and then waiting for
+        the correct amount of time, the limit will be lifted.
         """
         expected = [None] * 10 + [6.0]
         results = list(self._check(11, "PUT", "/anything"))
@@ -504,9 +495,7 @@ class LimiterTest(BaseLimitTestSuite):
         self.assertEqual(expected, results)
 
     def test_multiple_delays(self):
-        """
-        Ensure multiple requests still get a delay.
-        """
+        """Ensure multiple requests still get a delay."""
         expected = [None] * 10 + [6.0] * 10
         results = list(self._check(20, "PUT", "/anything"))
         self.assertEqual(expected, results)
@@ -522,16 +511,12 @@ class LimiterTest(BaseLimitTestSuite):
         self.assertEqual(expected, results)
 
     def test_user_limit(self):
-        """
-        Test user-specific limits.
-        """
+        """Test user-specific limits."""
         self.assertEqual(self.limiter.levels['user3'], [])
         self.assertEqual(len(self.limiter.levels['user0']), 2)
 
     def test_multiple_users(self):
-        """
-        Tests involving multiple users.
-        """
+        """Tests involving multiple users."""
 
         # User0
         expected = [None] * 2 + [30.0] * 8
@@ -580,9 +565,8 @@ class LimiterTest(BaseLimitTestSuite):
 
 
 class WsgiLimiterTest(BaseLimitTestSuite):
-    """
-    Tests for `limits.WsgiLimiter` class.
-    """
+
+    """Tests for `limits.WsgiLimiter` class."""
 
     def setUp(self):
         """Run before each test."""
@@ -650,9 +634,8 @@ class WsgiLimiterTest(BaseLimitTestSuite):
 
 
 class FakeHttplibSocket(object):
-    """
-    Fake `httplib.HTTPResponse` replacement.
-    """
+
+    """Fake `httplib.HTTPResponse` replacement."""
 
     def __init__(self, response_string):
         """Initialize new `FakeHttplibSocket`."""
@@ -664,22 +647,20 @@ 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
-        into our WSGI app, we then wait for the response and turn it back into
-        an `httplib.HTTPResponse`.
+        """Fake request handler.
+
+        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`.
         """
         if not headers:
             headers = {}
@@ -740,12 +721,12 @@ 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):
-        """
+        """setUp() for WsgiLimiterProxyTest.
+
         Do some nifty HTTP/WSGI magic which allows for WSGI to be called
         directly by something like the `httplib` library.
         """
index 9c5fd1d088af5e107d200a9ad787c5e2e969ba0c..ac8fd7d53999f49d678778a9cffa0fda62c35b65 100644 (file)
@@ -37,7 +37,9 @@ from cinder import utils
 
 
 class MockKeyManager(key_mgr.KeyManager):
-    """
+
+    """Mocking manager for integration tests.
+
     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
index c9a476b226f9be23e8049ec43ddcee5aaa4ca438..a232d69ea751156fd940439653002ada98c9a94a 100644 (file)
@@ -36,9 +36,7 @@ class FilterSchedulerTestCase(test_scheduler.SchedulerTestCase):
     driver_cls = filter_scheduler.FilterScheduler
 
     def test_create_volume_no_hosts(self):
-        """
-        Ensure empty hosts & child_zones result in NoValidHosts exception.
-        """
+        """Ensure empty hosts/child_zones result in NoValidHosts exception."""
         def _fake_empty_call_zone_method(*args, **kwargs):
             return []
 
index bc86c75cac2e119972640c1600a62ac1844e46b5..bf8e1e7bc9103df6c09f836c7739ee9a959a7cd4 100644 (file)
@@ -34,9 +34,9 @@ DATA = ''
 
 
 def stub_out_https_backend(stubs):
-    """
-    Stubs out the httplib.HTTPRequest.getresponse to return
-    faked-out data instead of grabbing actual contents of a resource
+    """Stub out the httplib.HTTPRequest.getresponse.
+
+    return faked-out data instead of grabbing actual contents of a resource.
 
     The stubbed getresponse() returns an iterator over
     the data "I am a teapot, short and stout\n"
index cddd1042389fbf8d15e1bfaeedaec4c994a106a5..696e29c9ba9395f0f6b7c6d62779a550745bb94e 100644 (file)
@@ -63,8 +63,8 @@ class BackupTestCase(test.TestCase):
                                 size=0,
                                 object_count=0,
                                 project_id='fake'):
-        """
-        Create a backup entry in the DB.
+        """Create a backup entry in the DB.
+
         Return the entry ID
         """
         backup = {}
@@ -87,8 +87,8 @@ class BackupTestCase(test.TestCase):
                                 display_description='this is a test volume',
                                 status='backing-up',
                                 size=1):
-        """
-        Create a volume entry in the DB.
+        """Create a volume entry in the DB.
+
         Return the entry ID
         """
         vol = {}
index acd74a49aec997209949f90e0b65acfabcbdcfe5..3c56ce3f1429f420de0e89faabf27aa72a871f85 100644 (file)
@@ -47,9 +47,10 @@ def _get_connect_string(backend,
                         user="openstack_citest",
                         passwd="openstack_citest",
                         database="openstack_citest"):
-    """
+    """Return connect string.
+
     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
+    these then we'll run the tests, otherwise they are skipped.
     """
     if backend == "postgres":
         backend = "postgresql+psycopg2"
@@ -227,7 +228,8 @@ class TestMigrations(test.TestCase):
                 os.unsetenv('PGUSER')
 
     def test_walk_versions(self):
-        """
+        """Test walk versions.
+
         Walks all version scripts for each tested database, ensuring
         that there are no errors in the version scripts for each engine
         """
@@ -235,7 +237,8 @@ class TestMigrations(test.TestCase):
             self._walk_versions(engine, self.snake_walk)
 
     def test_mysql_connect_fail(self):
-        """
+        """Test for mysql connection failure.
+
         Test that we can trigger a mysql connection failure and we fail
         gracefully to ensure we don't break people without mysql
         """
@@ -244,9 +247,7 @@ class TestMigrations(test.TestCase):
 
     @testtools.skipUnless(_have_mysql(), "mysql not available")
     def test_mysql_innodb(self):
-        """
-        Test that table creation on mysql only builds InnoDB tables
-        """
+        """Test that table creation on mysql only builds InnoDB tables."""
         # add this to the global lists to make reset work with it, it's removed
         # automaticaly in tearDown so no need to clean it up here.
         connect_string = _get_connect_string('mysql')
@@ -277,9 +278,10 @@ class TestMigrations(test.TestCase):
         self.assertEqual(count, 0, "%d non InnoDB tables created" % count)
 
     def test_postgresql_connect_fail(self):
-        """
+        """Test connection failure on PostgrSQL.
+
         Test that we can trigger a postgres connection failure and we fail
-        gracefully to ensure we don't break people without postgres
+        gracefully to ensure we don't break people without postgres.
         """
         if _is_backend_avail('postgres', user="openstack_cifail"):
             self.fail("Shouldn't have connected")
@@ -346,7 +348,7 @@ class TestMigrations(test.TestCase):
                                                   TestMigrations.REPOSITORY))
 
     def _migrate_up(self, engine, version, with_data=False):
-        """migrate up to a new version of the db.
+        """Migrate up to a new version of the db.
 
         We allow for data insertion and post checks at every
         migration version with special _prerun_### and
index 35cf90bdfb2611a0791d8e50ef90a98d8437d25b..61cccf3935c5a3327f80c8de7ae3afb16b0a12d6 100644 (file)
@@ -75,7 +75,8 @@ class FakeSnapshot(object):
 
 class FakeResponce(object):
     def __init__(self, status):
-        """
+        """Initialize FakeResponce.
+
         :param status: Either 'failed' or 'passed'
         """
         self.Status = status
index a54a9555a13cc313afc14badc70a7e5d3035fc6f..68fbf40d833c8d1ed8300822d922915afa63f383 100644 (file)
@@ -44,9 +44,7 @@ class XIVDS8KFakeProxyDriver(object):
     """Fake IBM XIV and DS8K Proxy Driver."""
 
     def __init__(self, xiv_ds8k_info, logger, expt, driver=None):
-        """
-        Initialize Proxy
-        """
+        """Initialize Proxy."""
 
         self.xiv_ds8k_info = xiv_ds8k_info
         self.logger = logger
index 99ccf23a7e586887256b94ce6df4dc51d962970d..cc65edd5b26f587dc563c0122c9ba5824c7e48ca 100644 (file)
@@ -59,9 +59,7 @@ class API(base.Base):
         return dict(rv.iteritems())
 
     def delete(self, context, transfer_id):
-        """
-        Make the RPC call to delete a volume transfer.
-        """
+        """Make the RPC call to delete a volume transfer."""
         volume_api.check_policy(context, 'delete_transfer')
         transfer = self.db.transfer_get(context, transfer_id)
 
index f20f653736b1377dfbddafac16beb09431f11e0f..a92180b9d02e4afe490a60ef5fce384a4b1a7508 100644 (file)
@@ -226,11 +226,12 @@ class SSHPool(pools.Pool):
             raise paramiko.SSHException(msg)
 
     def get(self):
-        """
-        Return an item from the pool, when one is available.  This may
-        cause the calling greenthread to block. Check if a connection is active
-        before returning it. For dead connections create and return a new
-        connection.
+        """Return an item from the pool, when one is available.
+
+        This may cause the calling greenthread to block. Check if a
+        connection is active before returning it.
+
+        For dead connections create and return a new connection.
         """
         conn = super(SSHPool, self).get()
         if conn:
index ccf6c1490d88e2493fd064497702945d0de08637..b6d4312e362d6be7445fa0b3c257b315d1773195 100644 (file)
@@ -281,7 +281,8 @@ class NexentaNfsDriver(nfs.NfsDriver):  # pylint: disable=R0921
                             volume['name'], 'volume')
 
     def _get_mount_point_for_share(self, nfs_share):
-        """
+        """Get Mount point for a share.
+
         :param nfs_share: example 172.18.194.100:/var/nfs
         """
         return os.path.join(self.configuration.nexenta_mount_point_base,
index 41458ec91e86b239b304b957c8ae1ec4ee8b7e9d..39f605da7e8fd8b72f5e8fff413acb181bad264f 100644 (file)
@@ -127,8 +127,7 @@ class HP3PARFCDriver(cinder.volume.driver.FibreChannelDriver):
 
     @utils.synchronized('3par', external=True)
     def create_volume_from_snapshot(self, volume, snapshot):
-        """
-        Creates a volume from a snapshot.
+        """Create a volume from a snapshot.
 
         TODO: support using the size from the user.
         """
index 036cb2c14c77ca8e51c6fc61792053b2d622087f..be4e0b1483e58f88a1a8de2785b4e6ca44a433f5 100644 (file)
@@ -198,8 +198,7 @@ class HP3PARISCSIDriver(cinder.volume.driver.ISCSIDriver):
 
     @utils.synchronized('3par', external=True)
     def create_volume_from_snapshot(self, volume, snapshot):
-        """
-        Creates a volume from a snapshot.
+        """Creates a volume from a snapshot.
 
         TODO: support using the size from the user.
         """
index 411a88b170a8c646f6c0b16df0c37f3a43c55aed..5d30339c8d733944ef43879a7be0d602dddc3c64 100644 (file)
@@ -279,8 +279,8 @@ class ZadaraVPSAISCSIDriver(driver.ISCSIDriver):
         self.configuration.append_config_values(zadara_opts)
 
     def do_setup(self, context):
-        """
-        Any initialization the volume driver does while starting.
+        """Any initialization the volume driver does while starting.
+
         Establishes initial connection with VPSA and retrieves access_key.
         """
         self.vpsa = ZadaraVPSAConnection(self.configuration)
@@ -295,8 +295,7 @@ class ZadaraVPSAISCSIDriver(driver.ISCSIDriver):
 
     def _xml_parse_helper(self, xml_tree, first_level, search_tuple,
                           first=True):
-        """
-        Helper for parsing VPSA's XML output.
+        """Helper for parsing VPSA's XML output.
 
         Returns single item if first==True or list for multiple selection.
         If second argument in search_tuple is None - returns all items with
@@ -406,8 +405,7 @@ class ZadaraVPSAISCSIDriver(driver.ISCSIDriver):
             size=volume['size'])
 
     def delete_volume(self, volume):
-        """
-        Delete volume.
+        """Delete volume.
 
         Return ok if doesn't exist. Auto detach from all servers.
         """
@@ -565,8 +563,7 @@ class ZadaraVPSAISCSIDriver(driver.ISCSIDriver):
         pass
 
     def initialize_connection(self, volume, connector):
-        """
-        Attach volume to initiator/host.
+        """Attach volume to initiator/host.
 
         During this call VPSA exposes volume to particular Initiator. It also
         creates a 'server' entity for Initiator (if it was not created before)
@@ -628,9 +625,7 @@ class ZadaraVPSAISCSIDriver(driver.ISCSIDriver):
                 'data': properties}
 
     def terminate_connection(self, volume, connector, **kwargs):
-        """
-        Detach volume from the initiator.
-        """
+        """Detach volume from the initiator."""
         # Get server name for IQN
         initiator_name = connector['initiator']
         vpsa_srv = self._get_server_name(initiator_name)
index dd4696e13bcaed1c98a7dcc7efbece6af79b52ea..b965d99b97f692d0444e671faa874682bbf3ef35 100755 (executable)
@@ -51,8 +51,9 @@ import testtools
 
 
 class _AnsiColorizer(object):
-    """
-    A colorizer is an object that loosely wraps around a stream, allowing
+    """ANSI colorizer that wraps a stream object.
+
+    colorizer is an object that loosely wraps around a stream, allowing
     callers to write text to the stream in a particular color.
 
     Colorizer classes must implement C{supported()} and C{write(text, color)}.
@@ -64,9 +65,12 @@ class _AnsiColorizer(object):
         self.stream = stream
 
     def supported(cls, stream=sys.stdout):
-        """
+        """Check if platform is supported.
+
         A class method that returns True if the current platform supports
-        coloring terminal output using this method. Returns False otherwise.
+        coloring terminal output using this method.
+
+        Returns False otherwise.
         """
         if not stream.isatty():
             return False  # auto color only on TTYs
@@ -87,8 +91,7 @@ class _AnsiColorizer(object):
     supported = classmethod(supported)
 
     def write(self, text, color):
-        """
-        Write the given text to the stream in the given color.
+        """Write the given text to the stream in the given color.
 
         @param text: Text to be written to the stream.
 
@@ -99,9 +102,7 @@ class _AnsiColorizer(object):
 
 
 class _Win32Colorizer(object):
-    """
-    See _AnsiColorizer docstring.
-    """
+    """See _AnsiColorizer docstring."""
     def __init__(self, stream):
         import win32console
         red, green, blue, bold = (win32console.FOREGROUND_RED,
@@ -149,9 +150,7 @@ class _Win32Colorizer(object):
 
 
 class _NullColorizer(object):
-    """
-    See _AnsiColorizer docstring.
-    """
+    """See _AnsiColorizer docstring."""
     def __init__(self, stream):
         self.stream = stream
 
diff --git a/tox.ini b/tox.ini
index b3d6fd0d245c3f8e10e1c795c19d9e20b844a146..9ce875eed583940fa998950722bf9c2d58ec05f7 100644 (file)
--- a/tox.ini
+++ b/tox.ini
@@ -43,6 +43,6 @@ commands =
 commands = {posargs}
 
 [flake8]
-ignore = E711,E712,F401,F403,F841,H302,H303,H304,H402,H404,H803
+ignore = E711,E712,F401,F403,F841,H302,H303,H304,H402,H803
 builtins = _
 exclude = .git,.venv,.tox,dist,doc,common,*egg,build