From 85efec7ab849de68785e68868527b976b03d5906 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pavel=20K=C3=A1cha?= <ph@cesnet.cz>
Date: Tue, 25 Jul 2017 11:33:51 +0200
Subject: [PATCH] Unified __str__

---
 warden3/warden_server/warden_server.py | 46 ++++----------------------
 1 file changed, 7 insertions(+), 39 deletions(-)

diff --git a/warden3/warden_server/warden_server.py b/warden3/warden_server/warden_server.py
index 17f1b1f..7b5b1dc 100644
--- a/warden3/warden_server/warden_server.py
+++ b/warden3/warden_server/warden_server.py
@@ -187,7 +187,7 @@ def FileLogger(req, filename, level=logging.INFO):
     logger = get_clean_root_logger(level)
     logger.addFilter(ffilt)
     logger.addHandler(fhand)
-    logger.info("Initialized FileLogger(req=%s, filename=\"%s\", level=\"%d\")" % (type(req).__name__, filename, level))
+    logger.info("Initialized FileLogger(req=%r, filename=\"%s\", level=%s)" % (req, filename, level))
     return logger
 
 
@@ -200,8 +200,7 @@ def SysLogger(req, socket="/dev/log", facility=logging.handlers.SysLogHandler.LO
     logger = get_clean_root_logger(level)
     logger.addFilter(ffilt)
     logger.addHandler(fhand)
-    logger.info("Initialized SysLogger(req=%s, socket=\"%s\", facility=\"%d\", level=\"%d\")" % (
-        type(req).__name__, socket, facility, level))
+    logger.info("Initialized SysLogger(req=%r, socket=\"%s\", facility=\"%d\", level=%s)" % (req, socket, facility, level))
     return logger
 
 
@@ -213,7 +212,9 @@ Client = namedtuple("Client", [
 class Object(object):
 
     def __str__(self):
-        return "%s()" % type(self).__name__
+        attrs = self.__init__.func_code.co_varnames[1:self.__init__.func_code.co_argcount]
+        eq_str = ["%s=%r" % (attr, getattr(self, attr, None)) for attr in attrs]
+        return "%s(%s)" % (type(self).__name__, ", ".join(eq_str))
 
 
 class Request(Object):
@@ -233,13 +234,6 @@ class Request(Object):
         which data their main codepaths work with.
     """
 
-    def __init__(self):
-        Object.__init__(self)
-        self.reset()
-
-    def __str__(self):
-        return "%s(env='%s', client='%s')" % (type(self).__name__, str(self.env), str(self.client))
-
     def reset(self, env=None, client=None, path=None, req_id=None):
         self.env = env
         self.client = client
@@ -249,6 +243,8 @@ class Request(Object):
         else:
             self.req_id = 0 if env is None else randint(0x00000000, 0xFFFFFFFF)
 
+    __init__ = reset
+
     def error(self, **kwargs):
         return Error(self.path, self.req_id, **kwargs)
 
@@ -260,9 +256,6 @@ class ObjectBase(Object):
         self.req = req
         self.log = log
 
-    def __str__(self):
-        return "%s(req=%s)" % (type(self).__name__, type(self.req).__name__)
-
 
 class PlainAuthenticator(ObjectBase):
 
@@ -270,9 +263,6 @@ class PlainAuthenticator(ObjectBase):
         ObjectBase.__init__(self, req, log)
         self.db = db
 
-    def __str__(self):
-        return "%s(req=%s, db=%s)" % (type(self).__name__, type(self.req).__name__, type(self.db).__name__)
-
     def authenticate(self, env, args, hostnames=None, check_secret=True):
         name = args.get("client", [None])[0]
         secret = args.get("secret", [None])[0] if check_secret else None
@@ -436,9 +426,6 @@ class NoValidator(ObjectBase):
     def __init__(self, req, log):
         ObjectBase.__init__(self, req, log)
 
-    def __str__(self):
-        return "%s(req=%s)" % (type(self).__name__, type(self.req).__name__)
-
     def check(self, event):
         return []
 
@@ -452,9 +439,6 @@ class JSONSchemaValidator(NoValidator):
             self.schema = json.load(f)
         self.validator = Draft4Validator(self.schema)
 
-    def __str__(self):
-        return "%s(req=%s, filename=\"%s\")" % (type(self).__name__, type(self.req).__name__, self.path)
-
     def check(self, event):
 
         def sortkey(k):
@@ -503,13 +487,6 @@ class MySQL(ObjectBase):
 
         self.con = None
 
-    def __str__(self):
-        return (
-            "%s(req=%s, host='%s', user='%s', dbname='%s', port=%d, retry_count=%d, "
-            "retry_pause=%d, catmap_filename=\"%s\", tagmap_filename=\"%s\")") % (
-            type(self).__name__, type(self.req).__name__, self.host, self.user, self.dbname, self.port, self.retry_count,
-            self.retry_pause, self.catmap_filename, self.tagmap_filename)
-
     def connect(self):
         self.con = my.connect(
             host=self.host, user=self.user, passwd=self.password,
@@ -889,10 +866,6 @@ class Server(ObjectBase):
         self.auth = auth
         self.handler = handler
 
-    def __str__(self):
-        return "%s(req=%s, auth=%s, handler=%s)" % (
-            type(self).__name__, type(self.req).__name__, type(self.auth).__name__, type(self.handler).__name__)
-
     def sanitize_args(self, path, func, args, exclude=["self", "post"]):
         # silently remove internal args, these should never be used
         # but if somebody does, we do not expose them by error message
@@ -1019,11 +992,6 @@ class WardenHandler(ObjectBase):
         self.get_events_limit = get_events_limit
         self.description = description
 
-    def __str__(self):
-        return "%s(req=%s, validator=%s, db=%s, send_events_limit=%s, get_events_limit=%s, description=\"%s\")" % (
-            type(self).__name__, type(self.req).__name__, type(self.validator).__name__, type(self.db).__name__,
-            self.get_events_limit, self.send_events_limit, self.description)
-
     @expose(read=1, debug=1)
     @json_wrapper
     def getDebug(self):
-- 
GitLab