From 191746e499f0dc1419dfaa4affe2effefcf7d956 Mon Sep 17 00:00:00 2001
From: Jan Mach <jan.mach@cesnet.cz>
Date: Tue, 24 Oct 2017 14:57:44 +0200
Subject: [PATCH] Code style improvements and lint error fixes with Pylint
 tool.

(Redmine issue: #3443)
---
 .pylintrc-lib                             |  2 +-
 bin/mentat-hawat.py                       |  4 ++--
 lib/hawat/base.py                         | 18 ------------------
 lib/hawat/blueprints/auth_dev/__init__.py |  2 +-
 lib/hawat/blueprints/design/__init__.py   |  2 ++
 lib/hawat/blueprints/events/__init__.py   | 12 +-----------
 lib/hawat/blueprints/geoip/__init__.py    | 10 +---------
 lib/hawat/blueprints/geoip/forms.py       | 10 ++++------
 lib/hawat/blueprints/groups/__init__.py   |  2 +-
 lib/hawat/blueprints/reports/__init__.py  | 12 +-----------
 lib/hawat/blueprints/skeleton/__init__.py | 12 +-----------
 lib/hawat/blueprints/whois/__init__.py    | 10 +---------
 lib/mentat/__init__.py                    | 10 ++++++++++
 lib/mentat/datatype/sqldb.py              |  4 ++--
 14 files changed, 28 insertions(+), 82 deletions(-)

diff --git a/.pylintrc-lib b/.pylintrc-lib
index 081573b30..56250826b 100644
--- a/.pylintrc-lib
+++ b/.pylintrc-lib
@@ -274,7 +274,7 @@ contextmanager-decorators=contextlib.contextmanager
 # List of members which are set dynamically and missed by pylint inference
 # system, and so shouldn't trigger E1101 when accessed. Python regular
 # expressions are accepted.
-generated-members=
+generated-members=query,commit,add,dirty,delete
 
 # Tells whether missing members accessed in mixin class should be ignored. A
 # mixin class is detected if its name ends with "mixin" (case insensitive).
diff --git a/bin/mentat-hawat.py b/bin/mentat-hawat.py
index 163802c80..9848c2eae 100755
--- a/bin/mentat-hawat.py
+++ b/bin/mentat-hawat.py
@@ -47,14 +47,14 @@ if __name__ == '__main__':
     # capabilities or for purposes of testing. Please refer to the documentation
     # for more information.
     #
-    app = hawat.create_app(
+    APP = hawat.create_app(
         config_object = 'hawat.config.DevelopmentConfig'
     )
 
     #
     # Launch WSGI application, bind to localhost:5000 and enforce debug mode to True.
     #
-    app.run(
+    APP.run(
         host  = '127.0.0.1',
         port  = 5000,
         debug = True
diff --git a/lib/hawat/base.py b/lib/hawat/base.py
index 4ef4c805b..4feb84902 100644
--- a/lib/hawat/base.py
+++ b/lib/hawat/base.py
@@ -221,24 +221,6 @@ class HawatSimpleView(HawatBaseView):
         return flask.render_template(self.get_view_template(), **context)
 
 
-class HawatSearchView(HawatBaseView):
-    """
-    Base class for search form views.
-    """
-
-    @staticmethod
-    def get_db_handle():
-        raise NotImplementedError()
-
-    @staticmethod
-    def get_col_handle():
-        raise NotImplementedError()
-
-    @property
-    def dbcollection(self):
-        return hawat.db.col_get(self.get_db_handle(), self.get_col_handle())
-
-
 class HawatCRUDLView(HawatBaseView):
     """
     Base class for all CREATE,READ,UPDATE,DELETE,LIST views. This base class provides
diff --git a/lib/hawat/blueprints/auth_dev/__init__.py b/lib/hawat/blueprints/auth_dev/__init__.py
index 8a72733a9..184c5b343 100644
--- a/lib/hawat/blueprints/auth_dev/__init__.py
+++ b/lib/hawat/blueprints/auth_dev/__init__.py
@@ -118,7 +118,7 @@ class LoginView(hawat.base.HawatSimpleView):
                 return flask.redirect(flask.url_for('index'))
 
             except sqlalchemy.orm.exc.MultipleResultsFound:
-                flask.current_app.logger.error("Multiple results found for user login '{}'.".format(user_login))
+                flask.current_app.logger.error("Multiple results found for user login '{}'.".format(form.login.data))
                 return flask.abort(500)
             except sqlalchemy.orm.exc.NoResultFound:
                 flask.flash(
diff --git a/lib/hawat/blueprints/design/__init__.py b/lib/hawat/blueprints/design/__init__.py
index 02f67ce69..5d75e539f 100644
--- a/lib/hawat/blueprints/design/__init__.py
+++ b/lib/hawat/blueprints/design/__init__.py
@@ -23,6 +23,8 @@ __author__ = "Jan Mach <jan.mach@cesnet.cz>"
 __credits__ = "Pavel Kácha <pavel.kacha@cesnet.cz>, Andrea Kropáčová <andrea.kropacova@cesnet.cz>"
 
 
+from flask_babel import lazy_gettext
+
 import hawat.base
 
 
diff --git a/lib/hawat/blueprints/events/__init__.py b/lib/hawat/blueprints/events/__init__.py
index 38988eb9b..8df62b36d 100644
--- a/lib/hawat/blueprints/events/__init__.py
+++ b/lib/hawat/blueprints/events/__init__.py
@@ -31,7 +31,7 @@ import hawat.base
 import hawat.db
 
 
-class SearchView(hawat.base.HawatSearchView):
+class SearchView(hawat.base.HawatBaseView):
 
     decorators = [flask_login.login_required]
     methods = ['GET']
@@ -59,16 +59,6 @@ class SearchView(hawat.base.HawatSearchView):
     def get_template_context(self):
         context = super().get_template_context()
 
-        storage    = hawat.db.db_get()
-        database   = storage.database('db')
-        collection = database.collection('col_alerts')
-
-        events = []
-        cursor = collection.find().limit(50)
-        for doc in cursor:
-            events.append(doc)
-        context['events'] = events
-
         return context
 
     def dispatch_request(self):
diff --git a/lib/hawat/blueprints/geoip/__init__.py b/lib/hawat/blueprints/geoip/__init__.py
index faa47b3b9..5d3f062e2 100644
--- a/lib/hawat/blueprints/geoip/__init__.py
+++ b/lib/hawat/blueprints/geoip/__init__.py
@@ -36,7 +36,7 @@ import hawat.db
 from hawat.blueprints.geoip.forms import GeoipSearchForm
 
 
-class SearchView(hawat.base.HawatSearchView):
+class SearchView(hawat.base.HawatBaseView):
 
     decorators = [flask_login.login_required]
     methods = ['GET']
@@ -61,14 +61,6 @@ class SearchView(hawat.base.HawatSearchView):
     def get_menu_title():
         return lazy_gettext('Internal geoip')
 
-    @staticmethod
-    def get_db_handle():
-        return 'db'
-
-    @staticmethod
-    def get_col_handle():
-        return 'col_groups'
-
     def dispatch_request(self):
         context = self.get_template_context()
 
diff --git a/lib/hawat/blueprints/geoip/forms.py b/lib/hawat/blueprints/geoip/forms.py
index 9c3a6de4c..d3d4f2ca9 100644
--- a/lib/hawat/blueprints/geoip/forms.py
+++ b/lib/hawat/blueprints/geoip/forms.py
@@ -17,13 +17,11 @@ __author__ = "Jan Mach <jan.mach@cesnet.cz>"
 __credits__ = "Pavel Kácha <pavel.kacha@cesnet.cz>, Andrea Kropáčová <andrea.kropacova@cesnet.cz>"
 
 
-import re
-
 import ipranges
-import flask_wtf
 import wtforms
 
-from flask_babel import gettext
+import flask_wtf
+from flask_babel import lazy_gettext, gettext
 
 
 def check_search_data(form, field):
@@ -45,12 +43,12 @@ class GeoipSearchForm(flask_wtf.FlaskForm):
     Class representing internal geoip search form.
     """
     search = wtforms.StringField(
-        gettext('Search internal geoip:'),
+        lazy_gettext('Search internal geoip:'),
         validators = [
             wtforms.validators.DataRequired(),
             check_search_data
         ]
     )
     submit = wtforms.SubmitField(
-        gettext('Search')
+        lazy_gettext('Search')
     )
diff --git a/lib/hawat/blueprints/groups/__init__.py b/lib/hawat/blueprints/groups/__init__.py
index a51ae83b7..5b6c5a3c8 100644
--- a/lib/hawat/blueprints/groups/__init__.py
+++ b/lib/hawat/blueprints/groups/__init__.py
@@ -42,7 +42,7 @@ from flask_babel import gettext, lazy_gettext
 #
 import hawat.base
 import hawat.db
-from mentat.datatype.sqldb import GroupModel
+from mentat.datatype.sqldb import GroupModel, SettingsReportingModel
 from hawat.blueprints.groups.forms import CreateGroupForm, UpdateGroupForm,\
     AdminUpdateGroupForm
 
diff --git a/lib/hawat/blueprints/reports/__init__.py b/lib/hawat/blueprints/reports/__init__.py
index 276b5afde..73bce2df4 100644
--- a/lib/hawat/blueprints/reports/__init__.py
+++ b/lib/hawat/blueprints/reports/__init__.py
@@ -31,7 +31,7 @@ import hawat.base
 import hawat.db
 
 
-class SearchView(hawat.base.HawatSearchView):
+class SearchView(hawat.base.HawatBaseView):
 
     decorators = [flask_login.login_required]
     methods = ['GET']
@@ -59,16 +59,6 @@ class SearchView(hawat.base.HawatSearchView):
     def get_template_context(self):
         context = super().get_template_context()
 
-        storage    = hawat.db.db_get()
-        database   = storage.database('db')
-        collection = database.collection('col_reports')
-
-        reports = []
-        cursor = collection.find().limit(30)
-        for doc in cursor:
-            reports.append(doc)
-        context['reports'] = reports
-
         return context
 
     def dispatch_request(self):
diff --git a/lib/hawat/blueprints/skeleton/__init__.py b/lib/hawat/blueprints/skeleton/__init__.py
index bd5b47a79..9d8134acc 100644
--- a/lib/hawat/blueprints/skeleton/__init__.py
+++ b/lib/hawat/blueprints/skeleton/__init__.py
@@ -30,7 +30,7 @@ import hawat.base
 import hawat.db
 
 
-class SearchView(hawat.base.HawatSearchView):
+class SearchView(hawat.base.HawatBaseView):
 
     decorators = [flask_login.login_required]
     methods = ['GET']
@@ -50,16 +50,6 @@ class SearchView(hawat.base.HawatSearchView):
     def get_template_context(self):
         context = super().get_template_context()
 
-        storage    = hawat.db.db_get()
-        database   = storage.database('db')
-        collection = database.collection('col_users')
-
-        users = []
-        cursor = collection.find().limit(3)
-        for doc in cursor:
-            users.append(doc)
-        context['users'] = users
-
         return context
 
     def dispatch_request(self):
diff --git a/lib/hawat/blueprints/whois/__init__.py b/lib/hawat/blueprints/whois/__init__.py
index 173132c95..749216e1a 100644
--- a/lib/hawat/blueprints/whois/__init__.py
+++ b/lib/hawat/blueprints/whois/__init__.py
@@ -36,7 +36,7 @@ import hawat.db
 from hawat.blueprints.whois.forms import WhoisSearchForm
 
 
-class SearchView(hawat.base.HawatSearchView):
+class SearchView(hawat.base.HawatBaseView):
 
     decorators = [flask_login.login_required]
     methods = ['GET']
@@ -61,14 +61,6 @@ class SearchView(hawat.base.HawatSearchView):
     def get_menu_title():
         return lazy_gettext('Internal whois')
 
-    @staticmethod
-    def get_db_handle():
-        return 'db'
-
-    @staticmethod
-    def get_col_handle():
-        return 'col_groups'
-
     def dispatch_request(self):
         context = self.get_template_context()
 
diff --git a/lib/mentat/__init__.py b/lib/mentat/__init__.py
index 7c4517862..7409e0538 100644
--- a/lib/mentat/__init__.py
+++ b/lib/mentat/__init__.py
@@ -8,6 +8,16 @@
 #-------------------------------------------------------------------------------
 
 
+"""
+*Mentat* is a distributed modular SIEM (Security Information and Event Management System)
+designed to monitor networks of all sizes. Its architecture enables reception,
+storage, analysis, processing and response to a great volume of security incidents
+originating from various sources, such as honeypots, network probes, log analysers,
+third party detection services, etc. The Mentat system has been developed as an
+open-source project.
+"""
+
+
 __author__  = "Jan Mach <jan.mach@cesnet.cz>"
 __credits__ = "Pavel Kácha <pavel.kacha@cesnet.cz>, Andrea Kropáčová <andrea.kropacova@cesnet.cz>"
 __version__ = "0.4.50"
diff --git a/lib/mentat/datatype/sqldb.py b/lib/mentat/datatype/sqldb.py
index 209524183..113dff34d 100644
--- a/lib/mentat/datatype/sqldb.py
+++ b/lib/mentat/datatype/sqldb.py
@@ -76,11 +76,11 @@ class MODEL:
     All required database objects should be implemented by extending this base model.
     """
     @declared_attr
-    def id(cls):
+    def id(self):
         return sqlalchemy.Column(sqlalchemy.Integer, primary_key = True)
 
     @declared_attr
-    def createtime(cls):
+    def createtime(self):
         return sqlalchemy.Column(sqlalchemy.DateTime, default = datetime.datetime.utcnow)
 
 MODEL = declarative_base(cls = MODEL)
-- 
GitLab