Closed Bug 1026181 Opened 10 years ago Closed 10 years ago

Colored mach formatter for mozlog.structured doesn't work outside of mach context

Categories

(Testing :: Mozbase, defect)

x86_64
Linux
defect
Not set
normal

Tracking

(Not tracked)

RESOLVED FIXED
mozilla34

People

(Reporter: wlach, Assigned: jgraham)

References

(Blocks 1 open bug)

Details

Attachments

(1 file, 3 obsolete files)

According to jgraham, the solution is to import the blessing module and use it when not using mozlog.structured in conjunction with mach. This also means adding blessings to the dependency list for mozlog. Example: (mozbase)wlach@eideticker:~/src/eideticker$ cat lt.py #!/usr/bin/env python import argparse import sys from mozlog.structured import structuredlog, commandline, get_default_logger parser = argparse.ArgumentParser() commandline.add_logging_group(parser) args = parser.parse_args() logger = commandline.setup_logging("structured-example", args, {"raw": sys.stdout}) logger.info("Running tests") Result: (mozbase)wlach@eideticker:~/src/eideticker$ python lt.py --log-mach_terminal - Traceback (most recent call last): File "lt.py", line 15, in <module> logger.info("Running tests") File "/home/wlach/src/mozilla-central-hg/testing/mozbase/mozlog/mozlog/structured/structuredlog.py", line 223, in log self._log_data("log", data) File "/home/wlach/src/mozilla-central-hg/testing/mozbase/mozlog/mozlog/structured/structuredlog.py", line 123, in _log_data handler(log_data) File "/home/wlach/src/mozilla-central-hg/testing/mozbase/mozlog/mozlog/structured/handlers/__init__.py", line 60, in __call__ formatted = self.formatter(data) File "/home/wlach/src/mozilla-central-hg/testing/mozbase/mozlog/mozlog/structured/formatters/machformatter.py", line 146, in __call__ t = self.terminal.blue(format_seconds(self._time(data))) AttributeError: 'NoneType' object has no attribute 'blue'
chmanchester: this also changes the presentation of results where there are no subtests. You might want to look at that (I didn't test it properly yet so it might even be broken).
Attachment #8441463 - Flags: feedback?(cmanchester)
Comment on attachment 8441463 [details] [diff] [review] Make mach terminal formatter work outside mach context. Review of attachment 8441463 [details] [diff] [review]: ----------------------------------------------------------------- New output looks good with a fix to the KeyError, and the colored bits work. ::: testing/mozbase/mozlog/mozlog/structured/formatters/machformatter.py @@ +67,5 @@ > > + #Reset the counts to 0 > + test = self._get_test_id(data) > + self.status_buffer[test] = {"count": 0, "unexpected": 0, "pass": 0} > + self.has_unexpected[test] = bool(unexpected) I get a key error in _colorize at line 170 because this isn't set if subtests is None.
Attachment #8441463 - Flags: feedback?(cmanchester) → feedback+
Attachment #8441463 - Attachment is obsolete: true
Attachment #8443467 - Flags: review?(wlachance)
Attachment #8443467 - Attachment is obsolete: true
Attachment #8443467 - Flags: review?(wlachance)
Attachment #8443593 - Flags: review?(wlachance)
Comment on attachment 8443593 [details] [diff] [review] Make mach terminal formatter work outside mach context. Review of attachment 8443593 [details] [diff] [review]: ----------------------------------------------------------------- Looks good, thanks! ::: testing/mozbase/mozlog/mozlog/structured/formatters/machformatter.py @@ +3,5 @@ > # file, You can obtain one at http://mozilla.org/MPL/2.0/. > > import time > > +import blessings Is there any reason there's blank lines between these imports?
Attachment #8443593 - Flags: review?(wlachance) → review+
"""Imports should be grouped in the following order: standard library imports related third party imports local application/library specific imports You should put a blank line between each group of imports.""" - http://legacy.python.org/dev/peps/pep-0008/#imports
(In reply to James Graham [:jgraham] from comment #6) > """Imports should be grouped in the following order: > > standard library imports > related third party imports > local application/library specific imports > > You should put a blank line between each group of imports.""" - > http://legacy.python.org/dev/peps/pep-0008/#imports Wow, you learn something new every day. :)
Sorry about that :( I hadn't considered that blessings, which is in tree, isn't also available in the mozharness environment. It isn't really needed, so we could work around it somehow, or put it on the internal PyPI.
Flags: needinfo?(james)
Depends on: 1028386
Filed bug 1028386 to get blessings into internal pypi
Relanded this after a promising-looking try run https://hg.mozilla.org/integration/mozilla-inbound/rev/1566b80f6c2b
Backed out for missing curses: https://tbpl.mozilla.org/php/getParsedLog.php?id=42273383&tree=Mozilla-Inbound Traceback (most recent call last): File "c:/builds/moz2_slave/m-in-w32-000000000000000000000/build/testing/mozbase/test.py", line 114, in <module> main() File "c:/builds/moz2_slave/m-in-w32-000000000000000000000/build/testing/mozbase/test.py", line 101, in main unittestlist.extend(unittests(test)) File "c:/builds/moz2_slave/m-in-w32-000000000000000000000/build/testing/mozbase/test.py", line 52, in unittests module = imp.load_source(modname, path) File "c:\builds\moz2_slave\m-in-w32-000000000000000000000\build\testing\mozbase\mozlog\tests\test_structured.py", line 8, in <module> from mozlog.structured import ( File "c:\builds\moz2_slave\m-in-w32-000000000000000000000\build\testing\mozbase\mozlog\mozlog\structured\__init__.py", line 5, in <module> import commandline File "c:\builds\moz2_slave\m-in-w32-000000000000000000000\build\testing\mozbase\mozlog\mozlog\structured\commandline.py", line 11, in <module> import formatters File "c:\builds\moz2_slave\m-in-w32-000000000000000000000\build\testing\mozbase\mozlog\mozlog\structured\formatters\__init__.py", line 9, in <module> from machformatter import MachFormatter, MachTerminalFormatter File "c:\builds\moz2_slave\m-in-w32-000000000000000000000\build\testing\mozbase\mozlog\mozlog\structured\formatters\machformatter.py", line 7, in <module> import blessings File "c:\builds\moz2_slave\m-in-w32-000000000000000000000\build\python\blessings\blessings\__init__.py", line 2, in <module> import curses File "c:\mozilla-build\python27\Lib\curses\__init__.py", line 15, in <module> from _curses import * ImportError: No module named _curses remote: https://hg.mozilla.org/integration/mozilla-inbound/rev/6a1dd10c12c2
I think we need to try/catch the blessings import and not create the formatter if we can't import the module.
Attachment #8443593 - Attachment is obsolete: true
Attachment #8464855 - Flags: review?(cmanchester)
Comment on attachment 8464855 [details] [diff] [review] Make mach terminal formatter work outside mach context Review of attachment 8464855 [details] [diff] [review]: ----------------------------------------------------------------- Works great running locally, let's go with it if it passes try. ::: testing/mozbase/mozlog/mozlog/structured/formatters/machformatter.py @@ +52,5 @@ > + time = self.terminal.blue(time) > + > + color = None > + > + if data["action"] == "test_end": I don't know if we have a use case for it right now, but test_status messages might also benefit from color.
Attachment #8464855 - Flags: review?(cmanchester) → review+
Assignee: nobody → james
Status: NEW → RESOLVED
Closed: 10 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla34
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: