Xqt has submitted this change. ( https://gerrit.wikimedia.org/r/c/pywikibot/core/+/692109 )
Change subject: [test] Test flushing ui and redefining TerminalHandler for T282962 ......................................................................
[test] Test flushing ui and redefining TerminalHandler for T282962
Change-Id: I03e1d17a1682ab5f8adddb20d68fdffca0e9a8a9 --- M pywikibot/userinterfaces/terminal_interface_base.py M tests/__init__.py 2 files changed, 101 insertions(+), 112 deletions(-)
Approvals: Xqt: Verified; Looks good to me, approved
diff --git a/pywikibot/userinterfaces/terminal_interface_base.py b/pywikibot/userinterfaces/terminal_interface_base.py index b51db48..c21295f 100755 --- a/pywikibot/userinterfaces/terminal_interface_base.py +++ b/pywikibot/userinterfaces/terminal_interface_base.py @@ -97,7 +97,7 @@ default_stream = self.stderr
# default handler for display to terminal - default_handler = TerminalHandler(self, strm=default_stream) + default_handler = TerminalHandler(self, stream=default_stream) if config.verbose_output: default_handler.setLevel(VERBOSE) else: @@ -105,22 +105,22 @@ # this handler ignores levels above INPUT default_handler.addFilter(MaxLevelFilter(INPUT)) default_handler.setFormatter( - TerminalFormatter(fmt='%(message)s%(newline)s')) + logging.Formatter(fmt='%(message)s%(newline)s')) root_logger.addHandler(default_handler)
# handler for level STDOUT - output_handler = TerminalHandler(self, strm=self.stdout) + output_handler = TerminalHandler(self, stream=self.stdout) output_handler.setLevel(STDOUT) output_handler.addFilter(MaxLevelFilter(STDOUT)) output_handler.setFormatter( - TerminalFormatter(fmt='%(message)s%(newline)s')) + logging.Formatter(fmt='%(message)s%(newline)s')) root_logger.addHandler(output_handler)
# handler for levels WARNING and higher - warning_handler = TerminalHandler(self, strm=self.stderr) + warning_handler = TerminalHandler(self, stream=self.stderr) warning_handler.setLevel(WARNING) warning_handler.setFormatter( - TerminalFormatter(fmt='%(levelname)s: %(message)s%(newline)s')) + logging.Formatter(fmt='%(levelname)s: %(message)s%(newline)s')) root_logger.addHandler(warning_handler)
warnings_logger = logging.getLogger('py.warnings') @@ -494,7 +494,7 @@ return list(self.argv)
-class TerminalHandler(logging.Handler): +class TerminalHandler(logging.StreamHandler):
"""A handler class that writes logging records to a terminal.
@@ -509,27 +509,19 @@ # create a class-level lock that can be shared by all instances sharedlock = threading.RLock()
- def __init__(self, UI, strm=None): - """Initialize the handler. - - If strm is not specified, sys.stderr is used. - - """ - super().__init__() + def __init__(self, UI, stream=None): + """Initializer.""" + super().__init__(stream=stream) # replace Handler's instance-specific lock with the shared class lock # to ensure that only one instance of this handler can write to # the console at a time self.lock = TerminalHandler.sharedlock - if strm is None: - strm = sys.stderr - self.stream = strm - self.formatter = None self.UI = UI
def flush(self): """Flush the stream.""" + super().flush() self.UI.flush() - self.stream.flush()
def emit(self, record): """Emit the record formatted to the output and return it.""" @@ -542,14 +534,10 @@ record.__dict__.setdefault('newline', '\n')
text = self.format(record) + self.flush() return self.UI.output(text, targetStream=self.stream)
-class TerminalFormatter(logging.Formatter): - - """Terminal logging formatter.""" - - class MaxLevelFilter(logging.Filter):
"""Filter that only passes records at or below a specific level. diff --git a/tests/__init__.py b/tests/__init__.py index ebac252..cae36d79 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -74,97 +74,98 @@ _pwb_py = join_root_path('pwb.py')
library_test_modules = { - 'api', - 'basesite', - 'bot', - 'category', - 'collections', - 'cosmetic_changes', - 'date', - 'datasite', - 'deprecation', - 'diff', - 'djvu', - 'dry_api', - 'dry_site', - 'echo', - 'edit', - 'edit_failure', - 'eventstreams', - 'family', - 'file', - 'fixes', - 'flow', - 'flow_edit', - 'flow_thanks', - 'http', - 'i18n', - 'interwiki_graph', - 'interwiki_link', - 'interwikimap', - 'link', - 'linter', - 'logentries', - 'login', - 'mediawikiversion', - 'mysql', - 'namespace', - 'oauth', - 'page', - 'pagegenerators', - 'paraminfo', - 'plural', - 'proofreadpage', - 'site', - 'site_decorators', - 'site_detect', - 'siteinfo', - 'sparql', - 'tests', - 'textlib', - 'thanks', - 'thread', - 'timestamp', - 'timestripper', - 'tk', - 'token', - 'tools', - 'tools_chars', - 'tools_formatter', +## 'api', +## 'basesite', +## 'bot', +## 'category', +## 'collections', +## 'cosmetic_changes', +## 'date', +## 'datasite', +## 'deprecation', +## 'diff', +## 'djvu', +## 'dry_api', +## 'dry_site', +## 'echo', +## 'edit', +## 'edit_failure', +## 'eventstreams', +## 'family', +## 'file', +## 'fixes', +## 'flow', +## 'flow_edit', +## 'flow_thanks', +## 'http', +## 'i18n', +## 'interwiki_graph', +## 'interwiki_link', +## 'interwikimap', +## 'link', +## 'linter', +## 'logentries', +## 'login', +## 'mediawikiversion', +## 'mysql', +## 'namespace', +## 'oauth', +## 'page', +## 'pagegenerators', +## 'paraminfo', +## 'plural', +## 'proofreadpage', +## 'site', +## 'site_decorators', +## 'site_detect', +## 'siteinfo', +## 'sparql', +## 'tests', +## 'textlib', +## 'thanks', +## 'thread', +## 'timestamp', +## 'timestripper', +## 'tk', +## 'token', +## 'tools', +## 'tools_chars', +## 'tools_formatter', 'ui', - 'ui_options', - 'upload', - 'uploadbot', - 'user', - 'wikibase', - 'wikibase_edit', - 'wikistats', - 'xmlreader' +## 'ui_options', +## 'upload', +## 'uploadbot', +## 'user', +## 'wikibase', +## 'wikibase_edit', +## 'wikistats', +## 'xmlreader' }
-script_test_modules = { - 'add_text', - 'archivebot', - 'cache', - 'category_bot', - 'checkimages', - 'deletionbot', - 'fixing_redirects', - 'generate_family_file', - 'generate_user_files', - 'interwikidata', - 'l10n', - 'patrolbot', - 'protectbot', - 'pwb', - 'redirect_bot', - 'reflinks', - 'replacebot', - 'script', - 'template_bot', - 'uploadscript', - 'weblinkchecker' -} +script_test_modules = set() + +## 'add_text', +## 'archivebot', +## 'cache', +## 'category_bot', +## 'checkimages', +## 'deletionbot', +## 'fixing_redirects', +## 'generate_family_file', +## 'generate_user_files', +## 'interwikidata', +## 'l10n', +## 'patrolbot', +## 'protectbot', +## 'pwb', +## 'redirect_bot', +## 'reflinks', +## 'replacebot', +## 'script', +## 'template_bot', +## 'uploadscript', +## 'weblinkchecker' +##}
disabled_test_modules = { 'tests', # tests of the tests package
pywikibot-commits@lists.wikimedia.org