ext: Avoid specifying empty interfaces and embrace duck typing
authorGiacomo Travaglini <giacomo.travaglini@arm.com>
Wed, 10 Jun 2020 17:52:04 +0000 (18:52 +0100)
committerGiacomo Travaglini <giacomo.travaglini@arm.com>
Thu, 18 Jun 2020 14:28:14 +0000 (14:28 +0000)
It turns out no handler is implementing

prehandle()
posthandle()

JIRA: https://gem5.atlassian.net/projects/GEM5/issues/GEM5-533

Change-Id: Ie8d92027f29fc33192fcf0d495fd3c4f6e4075aa
Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/30217
Maintainer: Bobby R. Bruce <bbruce@ucdavis.edu>
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Hoa Nguyen <hoanguyen@ucdavis.edu>
ext/testlib/handlers.py
ext/testlib/log.py

index 3005e01efb282006ed42cb6fd15e953ca7aedcd1..38f50c46821e90a80901e5d8edbd57c19e5c270d 100644 (file)
@@ -87,7 +87,7 @@ class _TestStreams(object):
         self.stdout.close()
         self.stderr.close()
 
-class ResultHandler(log.Handler):
+class ResultHandler(object):
     '''
     Log handler which listens for test results and output saving data as
     it is reported.
@@ -181,7 +181,7 @@ class ResultHandler(log.Handler):
 
 #TODO Change from a handler to an internal post processor so it can be used
 # to reprint results
-class SummaryHandler(log.Handler):
+class SummaryHandler(object):
     '''
     A log handler which listens to the log for test results
     and reports the aggregate results when closed.
@@ -250,7 +250,7 @@ class SummaryHandler(log.Handler):
                 string,
                 color=self.colormap[most_severe_outcome] + self.color.Bold)
 
-class TerminalHandler(log.Handler):
+class TerminalHandler(object):
     color = terminal.get_termcap()
     verbosity_mapping = {
         log.LogLevel.Warn: color.Yellow,
@@ -330,22 +330,13 @@ class TerminalHandler(log.Handler):
             return
         self.mapping.get(record.type_id, lambda _:None)(record)
 
-    def set_verbosity(self, verbosity):
-        self.verbosity = verbosity
-
-
-class PrintHandler(log.Handler):
-    def __init__(self):
-        pass
-
-    def handle(self, record):
-        print(str(record).rstrip())
-
     def close(self):
         pass
 
+    def set_verbosity(self, verbosity):
+        self.verbosity = verbosity
 
-class MultiprocessingHandlerWrapper(log.Handler):
+class MultiprocessingHandlerWrapper(object):
     '''
     A handler class which forwards log records to subhandlers, enabling
     logging across multiprocessing python processes.
index cddb9217c681f3b8b1170e24fd6e07062604fea8..451ee1dc64fe80f4ac754533a16941decff8754b 100644 (file)
@@ -130,10 +130,8 @@ class Log(object):
             raise Exception('The log has been closed'
                 ' and is no longer available.')
 
-        map(lambda handler:handler.prehandle(), self.handlers)
         for handler in self.handlers:
             handler.handle(record)
-            handler.posthandle()
 
     def add_handler(self, handler):
         if self._opened:
@@ -144,28 +142,6 @@ class Log(object):
         handler.close()
         self.handlers.remove(handler)
 
-
-class Handler(object):
-    '''
-    Empty implementation of the interface available to handlers which
-    is expected by the :class:`Log`.
-    '''
-    def __init__(self):
-        pass
-
-    def handle(self, record):
-        pass
-
-    def close(self):
-        pass
-
-    def prehandle(self):
-        pass
-
-    def posthandle(self):
-        pass
-
-
 class LogWrapper(object):
     _result_typemap = {
         wrappers.LoadedLibrary.__name__: LibraryResult,