]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
mgr/dashboard_v2: Fix pylint executor and warnings/errors
authorRicardo Dias <rdias@suse.com>
Thu, 25 Jan 2018 17:14:42 +0000 (17:14 +0000)
committerRicardo Dias <rdias@suse.com>
Mon, 5 Mar 2018 13:07:00 +0000 (13:07 +0000)
Signed-off-by: Ricardo Dias <rdias@suse.com>
12 files changed:
src/pybind/mgr/dashboard_v2/.pylintrc
src/pybind/mgr/dashboard_v2/ceph_module_mock.py
src/pybind/mgr/dashboard_v2/controllers/auth.py
src/pybind/mgr/dashboard_v2/controllers/ping.py
src/pybind/mgr/dashboard_v2/module.py
src/pybind/mgr/dashboard_v2/requirements.txt
src/pybind/mgr/dashboard_v2/tests/helper.py
src/pybind/mgr/dashboard_v2/tests/test_auth.py
src/pybind/mgr/dashboard_v2/tests/test_ping.py
src/pybind/mgr/dashboard_v2/tests/test_tools.py
src/pybind/mgr/dashboard_v2/tools.py
src/pybind/mgr/dashboard_v2/tox.ini

index 99377767df9d5f5fd875187ab4978eac03f7e028..f43d157e452da7d2d45dffd3f4464050ab20cd29 100644 (file)
@@ -126,7 +126,13 @@ disable=print-statement,
         next-method-defined,
         dict-items-not-iterating,
         dict-keys-not-iterating,
-        dict-values-not-iterating
+        dict-values-not-iterating,
+        missing-docstring,
+        invalid-name,
+        no-self-use,
+        too-few-public-methods,
+        no-member,
+        fixme
 
 # Enable the message, report, category or checker with the given id(s). You can
 # either give multiple identifier separated by comma (,) or put this option
index c8f866f61b7658d039f9a5afa7739dcb989c050a..fbf32359199292f9497303e8e5784653f970afed 100644 (file)
@@ -1,20 +1,24 @@
 # -*- coding: utf-8 -*-
 
-from mock import Mock
 
 class BasePyOSDMap(object):
     pass
 
+
 class BasePyOSDMapIncremental(object):
     pass
 
+
 class BasePyCRUSH(object):
     pass
 
+
 class BaseMgrStandbyModule(object):
     pass
 
+
 class BaseMgrModule(object):
+    # pylint: disable=W0613
     def __init__(self, py_modules_ptr, this_ptr):
         self.config_key_map = {}
 
@@ -32,5 +36,3 @@ class BaseMgrModule(object):
 
     def _ceph_log(self, *args):
         pass
-
-
index 7ce3f87899ce6c5fc6f6289d29c3ae9688a6e3c9..36ce70be587e82e551efcfbec98e4b906905dc6d 100644 (file)
@@ -1,12 +1,13 @@
 # -*- coding: utf-8 -*-
 from __future__ import absolute_import
 
-import bcrypt
-import cherrypy
 import time
 import sys
 
-from ..tools import ApiController, AuthRequired, RESTController
+import bcrypt
+import cherrypy
+
+from ..tools import ApiController, RESTController
 
 
 @ApiController('auth')
@@ -30,6 +31,7 @@ class Auth(RESTController):
     DEFAULT_SESSION_EXPIRE = 1200.0
 
     def __init__(self):
+        # pylint: disable=E1101
         self._mod = Auth._mgr_module_
         self._log = self._mod.log
 
@@ -46,10 +48,10 @@ class Auth(RESTController):
             cherrypy.session[Auth.SESSION_KEY_TS] = now
             self._log.debug("Login successful")
             return {'username': username}
-        else:
-            cherrypy.response.status = 403
-            self._log.debug("Login fail")
-            return {'detail': 'Invalid credentials'}
+
+        cherrypy.response.status = 403
+        self._log.debug("Login fail")
+        return {'detail': 'Invalid credentials'}
 
     def bulk_delete(self):
         self._log.debug("Logout successful")
@@ -62,8 +64,7 @@ class Auth(RESTController):
             salt_password = bcrypt.gensalt()
         if sys.version_info > (3, 0):
             return bcrypt.hashpw(password, salt_password)
-        else:
-            return bcrypt.hashpw(password.encode('utf8'), salt_password)
+        return bcrypt.hashpw(password.encode('utf8'), salt_password)
 
     @staticmethod
     def check_auth():
@@ -76,8 +77,7 @@ class Auth(RESTController):
                                           'that resource')
         now = time.time()
         expires = float(module.get_localized_config(
-                        'session-expire',
-                        Auth.DEFAULT_SESSION_EXPIRE))
+            'session-expire', Auth.DEFAULT_SESSION_EXPIRE))
         if expires > 0:
             username_ts = cherrypy.session.get(Auth.SESSION_KEY_TS, None)
             if username_ts and float(username_ts) < (now - expires):
index 28ef35cd50462727463bba02dd2491aef4b1602f..f04317f38c16cce08e529cf1e8143ddfc29051bc 100644 (file)
@@ -10,7 +10,7 @@ from ..tools import ApiController, AuthRequired, RESTController
 @AuthRequired()
 class Ping(object):
     @cherrypy.expose
-    def default(self, *args):
+    def default(self):
         return "pong"
 
 
index ab027bb40d979aa66431fd886b08eeea665dff50..739418ec428a8c2edbbae7dd68e51abf2057d49b 100644 (file)
@@ -4,10 +4,10 @@ openATTIC mgr plugin (based on CherryPy)
 """
 from __future__ import absolute_import
 
-
+import errno
 import os
+
 import cherrypy
-from cherrypy import tools
 from mgr_module import MgrModule
 
 from .controllers.auth import Auth
@@ -15,10 +15,12 @@ from .tools import load_controllers
 
 
 # cherrypy likes to sys.exit on error.  don't let it take us down too!
+# pylint: disable=W0613
 def os_exit_noop(*args):
     pass
 
 
+# pylint: disable=W0212
 os._exit = os_exit_noop
 
 
@@ -37,9 +39,6 @@ class Module(MgrModule):
         }
     ]
 
-    def __init__(self, *args, **kwargs):
-        super(Module, self).__init__(*args, **kwargs)
-
     def serve(self):
         server_addr = self.get_localized_config('server_addr', '::')
         server_port = self.get_localized_config('server_port', '8080')
@@ -48,13 +47,13 @@ class Module(MgrModule):
                 'no server_addr configured; '
                 'try "ceph config-key put mgr/{}/{}/server_addr <ip>"'
                 .format(self.module_name, self.get_mgr_id()))
-        self.log.info("server_addr: %s server_port: %s" % (server_addr,
-                                                           server_port))
+        self.log.info("server_addr: %s server_port: %s"server_addr,
+                      server_port)
 
         cherrypy.config.update({
-                                'server.socket_host': server_addr,
-                                'server.socket_port': int(server_port),
-                               })
+            'server.socket_host': server_addr,
+            'server.socket_port': int(server_port),
+        })
         cherrypy.tools.autenticate = cherrypy.Tool('before_handler',
                                                    Auth.check_auth)
 
@@ -86,9 +85,9 @@ class Module(MgrModule):
             hashed_passwd = Auth.password_hash(cmd['password'])
             self.set_localized_config('password', hashed_passwd)
             return 0, 'Username and password updated', ''
-        else:
-            return (-errno.EINVAL, '', 'Command not found \'{0}\''.format(
-                    cmd['prefix']))
+
+        return (-errno.EINVAL, '', 'Command not found \'{0}\''
+                .format(cmd['prefix']))
 
     class ApiRoot(object):
         def __init__(self, mgrmod):
index 0f72fc24cdd80ea82b639ecabb6dd0308671ea2f..04704c0751ead350462569956545b16dee601e8d 100644 (file)
@@ -16,6 +16,8 @@ pbr==3.1.1
 pluggy==0.6.0
 portend==2.2
 py==1.5.2
+pycodestyle==2.3.1
+pycparser==2.18
 pylint==1.8.2
 pytest==3.3.2
 pytest-cov==2.5.1
index c6f2f79430d452e24e8739ee1824a39d92588836..63a7fb8cc2db25c0d16724bdfb670d508cf4d623 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-
+# pylint: disable=W0212
 from __future__ import absolute_import
 
 import json
index b55c643875d7e00f40f80f9bcdf18af111f154c4..160d1f4f26806612f104b479e0f43b2f5add58cc 100644 (file)
@@ -29,8 +29,8 @@ class AuthTest(ApiControllerTestCase):
 
         cherrypy.tree.mount(Ping(), "/api/test",
                             config={'/': {'tools.autenticate.on': True}})
-        module.set_localized_config('session-expire','2')
-        module.set_localized_config('username','admin')
+        module.set_localized_config('session-expire', '2')
+        module.set_localized_config('username', 'admin')
         module.set_localized_config('password', Auth.password_hash('admin'))
 
     def test_login_valid(self):
@@ -39,7 +39,7 @@ class AuthTest(ApiControllerTestCase):
             self._post("/api/auth", {'username': 'admin', 'password': 'admin'})
             self.assertStatus('201 Created')
             self.assertBody('{"username": "admin"}')
-            self.assertEquals(sess_mock.get(Auth.SESSION_KEY), 'admin')
+            self.assertEqual(sess_mock.get(Auth.SESSION_KEY), 'admin')
 
     def test_login_invalid(self):
         sess_mock = RamSession()
@@ -47,35 +47,35 @@ class AuthTest(ApiControllerTestCase):
             self._post("/api/auth", {'username': 'admin', 'password': 'inval'})
             self.assertStatus('403 Forbidden')
             self.assertBody('{"detail": "Invalid credentials"}')
-            self.assertEquals(sess_mock.get(Auth.SESSION_KEY), None)
+            self.assertEqual(sess_mock.get(Auth.SESSION_KEY), None)
 
     def test_logout(self):
         sess_mock = RamSession()
         with patch('cherrypy.session', sess_mock, create=True):
             self._post("/api/auth", {'username': 'admin', 'password': 'admin'})
-            self.assertEquals(sess_mock.get(Auth.SESSION_KEY), 'admin')
+            self.assertEqual(sess_mock.get(Auth.SESSION_KEY), 'admin')
             self._delete("/api/auth")
             self.assertStatus('204 No Content')
             self.assertBody('')
-            self.assertEquals(sess_mock.get(Auth.SESSION_KEY), None)
+            self.assertEqual(sess_mock.get(Auth.SESSION_KEY), None)
 
     def test_session_expire(self):
         sess_mock = RamSession()
         with patch('cherrypy.session', sess_mock, create=True):
             self._post("/api/auth", {'username': 'admin', 'password': 'admin'})
             self.assertStatus('201 Created')
-            self.assertEquals(sess_mock.get(Auth.SESSION_KEY), 'admin')
+            self.assertEqual(sess_mock.get(Auth.SESSION_KEY), 'admin')
             self._post("/api/test/ping")
             self.assertStatus('200 OK')
-            self.assertEquals(sess_mock.get(Auth.SESSION_KEY), 'admin')
+            self.assertEqual(sess_mock.get(Auth.SESSION_KEY), 'admin')
             time.sleep(3)
             self._post("/api/test/ping")
             self.assertStatus('401 Unauthorized')
-            self.assertEquals(sess_mock.get(Auth.SESSION_KEY), None)
+            self.assertEqual(sess_mock.get(Auth.SESSION_KEY), None)
 
     def test_unauthorized(self):
         sess_mock = RamSession()
         with patch('cherrypy.session', sess_mock, create=True):
             self._post("/api/test/ping")
             self.assertStatus('401 Unauthorized')
-            self.assertEquals(sess_mock.get(Auth.SESSION_KEY), None)
+            self.assertEqual(sess_mock.get(Auth.SESSION_KEY), None)
index 748e415ce12ab8e3b8ce981304be6a44eb518d88..afd735b95233f5d1593d7ab74146a4584b14be21 100644 (file)
@@ -21,4 +21,3 @@ class SimpleCPTest(ApiControllerTestCase):
     def test_echo_args(self):
         self._post("/api/echo1", {'msg': 'Hello World'})
         self.assertStatus('201 Created')
-
index a8a2feac224a5bbb7c447389741031a866340072..d06cf3741bd67db61a2ed288fe82859ea46a4902 100644 (file)
@@ -10,7 +10,7 @@ from mock import patch
 from .helper import ApiControllerTestCase
 from ..tools import RESTController
 
-
+# pylint: disable=W0613
 class FooResource(RESTController):
     elems = []
 
@@ -30,7 +30,7 @@ class FooResource(RESTController):
     def bulk_delete(self):
         FooResource.elems = []
 
-
+# pylint: disable=C0102
 class Root(object):
     foo = FooResource()
 
index a27b995e6f8a2e5c5db0eec1ddc891015d512015..e704f2e6b7d34f77410b85914741c0687b3a131d 100644 (file)
@@ -1,4 +1,5 @@
 # -*- coding: utf-8 -*-
+# pylint: disable=W0212
 from __future__ import absolute_import
 
 import importlib
@@ -130,7 +131,7 @@ class RESTController(object):
         is_element = len(vpath) > 0
 
         (method_name, status_code) = self._method_mapping[
-                (cherrypy.request.method, is_element)]
+            (cherrypy.request.method, is_element)]
         method = getattr(self, method_name, None)
         if not method:
             self._not_implemented(is_element)
@@ -150,6 +151,7 @@ class RESTController(object):
         func._args_from_json_ = True
         return func
 
+    # pylint: disable=W1505
     @staticmethod
     def _takes_json(func):
         def inner(*args, **kwargs):
@@ -157,25 +159,28 @@ class RESTController(object):
             body = cherrypy.request.body.read(content_length)
             if not body:
                 raise cherrypy.HTTPError(400, 'Empty body. Content-Length={}'
-                                              .format(content_length))
+                                         .format(content_length))
             try:
                 data = json.loads(body.decode('utf-8'))
             except Exception as e:
                 raise cherrypy.HTTPError(400, 'Failed to decode JSON: {}'
-                                              .format(str(e)))
+                                         .format(str(e)))
             if hasattr(func, '_args_from_json_'):
-                f_args = inspect.getargspec(func).args
+                if sys.version_info > (3, 0):
+                    f_args = list(inspect.signature(func).parameters.keys())
+                else:
+                    f_args = inspect.getargspec(func).args[1:]
                 n_args = []
                 for arg in args:
                     n_args.append(arg)
-                for arg in f_args[1:]:
+                for arg in f_args:
                     if arg in data:
                         n_args.append(data[arg])
                         data.pop(arg)
                 kwargs.update(data)
                 return func(*n_args, **kwargs)
-            else:
-                return func(data, *args, **kwargs)
+
+            return func(data, *args, **kwargs)
         return inner
 
     @staticmethod
index 6f6e4588e6dcb16537ddf84d76b50f317072138b..56c3074edbf6179454ec1b5f214de2d5f735efd6 100644 (file)
@@ -19,10 +19,7 @@ commands=
     {envbindir}/py.test --cov=. --cov-report=term --cov-report=xml --junitxml=junit.xml tests/
 
 [testenv:lint]
-deps=
-    pylint
-    pycodestyle
+deps=-r{toxinidir}/requirements.txt
 commands=
-    pylint --rcfile=.pylintrc --jobs=5 .
-    pycodestyle --max-line-length=100 --exclude=ceph_module_mock.py,python2.7,tests,.tox,venv .
-
+    pylint --rcfile=.pylintrc --jobs=5 . module.py tools.py ceph_module_mock.py controllers tests
+    pycodestyle --max-line-length=100 --exclude=python2.7,.tox,venv .